vb.net控件序列化 vb列表控件( 五 )


当然我们也可以更改源代码 例如 你可以使用字符串来建立需要在应用程序中直接使用的代码 如果你需要代码具有高度灵活性 且代码本身不是很长时 这一方法的优势就非常显著 也可以从文件里建立代码 就如同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即可
现在 你已经定义了项目 接下来需要为其创建源代码 如前文所述 你可以依赖于一个外部文件或DOM模式 然后 该示例创建了代码因此你可以看到整个过程 下面是代码的原始形式Imports System Windows Forms Module TestAssemblySub Main()MessageBox Show( Dynamically Created Code! )End SubEnd Module

推荐阅读