幸运的是 NET为我们提供了一系列动态代码选项 例如 你可以创建一个可执行的能独立运行的程序或是可以想运行中的程序加载一个DLL然后再执行 当你需要演示一个外部任务的时候可以使用选择可执行 如运行一种脚本——该DLL选项最适合扩大现有的应用程序功能
你可以运行来自文件或内存的动态代码 当你需要不止一次地运行代码时 可以使用文件 对代码的检查可以再次运行外部文件而不需要对其进行二次编译 当你需要多次演示任务的时候 如一个安装请求 那可以使用内存图像
当然我们也可以更改源代码 例如 你可以使用字符串来建立需要在应用程序中直接使用的代码 如果你需要代码具有高度灵活性 且代码本身不是很长时 这一方法的优势就非常显著 也可以从文件里建立代码 就如同VS一样 这一方法最适用于相对稳定且不需要复杂编码的需求 第三种选择是使用Documentation Object Model来创建代码并将其作为CodeDom树型结构的一个系列 该树型结构包括了CodeCormpileUnits 这就像是用DOM模式创建了一个XML文件
使用动态创建代码的最好方式是用示例来检查一下 例三展示了一个基本 Hello World 示例 该示例用源代码直接创建了代码因此你可以看到整个运行以及生成一个外部可执行文件的过程
例三 动态编码示例Private Sub btnTest _Click() Handles btnTest ClickCreate a piler Dim Comp As VBCodeProvider = New VBCodeProvider()Define the parameters for the code you want to pile Dim Parms As CompilerParameters = New CompilerParameters)We do want to create an executablerather than a DLL Parms GenerateExecutable = TrueThe piler will create an output assembly called Output Parms OutputAssembly =OutputThe piler won t treat warnings as errors Parms TreatWarningsAsErrors = FalseAdd any assembly you want to reference Parms ReferencedAssemblies Add( System Windows Forms dll )Define the code you want to runDim SampleCode As StringBuilder = New StringBuilder() SampleCode Append( Imports System Windows Forms+ vbCrLf) SampleCode Append( Module TestAssembly+ vbCrLf) SampleCode Append( Sub Main()+ vbCrLf) SampleCode Append( MessageBox Show(+ Chr( ) + _ Dynamically Created Code!+ _Chr( ) +)+ vbCrLf)SampleCode Append( End Sub+ vbCrLf)SampleCode Append( End Module+ vbCrLf)Define the code to run Dim Executable As CompilerResults = _ Comp CompileAssemblyFromSource(ParmsSampleCode ToString())Display error messages if there are any If Executable Errors HasErrors ThenFor Each Item As CompilerError In Executable ErrorsMessageBox Show(Item ErrorText)NextElseIf there aren t any error messagesstart theexecutable Process Start( Output )End IfEnd Sub
一开始你创建了一个使用VBCodeProvider的编译器Comp 旧一点的 NET版本使用的是不同的方法但是这里所讲的是微软推荐的一个新方法
为了使用编译器 你必须创建能描述应用程序的参数 这些参数类似于VS中你创建的参数 只是现在你可以对它们进行定义 该代码一开始就将GenerateExecutable设置为True 这意味着你需要的是一个EXE文件而不是DLL
Parms OutputAssembly属性包含了输出文件的名称 你只需要在想创建文件时提供这一信息即可 而不需要生成可执行内存了 如果你ixiang生成可执行文件的内存版本 可以将Parm GenerateInMemory属性设置为True
使用Parm TreatWarningsAsErrors属性来确定如何处理警告信息 默认的设置会使其为错误 这意味着你的应用程序可能无法对其进行编译 大多数程序员使用默认设置 尽管他们开发了程序 但是在开发完成的程序中却将其设置为False
大多数应用程序需要外部DLL以正常运行 当然 你不能创建任意的没有引用外部DLL的Windows表单程序 通常 你要使用Reference文件夹来完成这一任务 不过 当你动态创建代码的时候可以依赖于Parms ReferencedAssemblies属性 如下所示 只需添加你要的DLL即可
推荐阅读
- 抖音直播哪里投票赚钱,抖音直播怎么发起投票
- 刚开箱的电视花屏了怎么办,电视开久了花屏
- python爬虫如何获取图片地址,python爬取指定的图片链接
- 即时战略机甲游戏,即时战略游戏ai
- c语言日期转换函数是 c语言日期转字符串
- gis导出地图提示内存不足的简单介绍
- 益智美国游戏,欧美益智游戏
- sqlserver攻击防护,sql攻击的防范措施
- go语言实现阻塞队列 go 阻塞队列