源码
REM Dynamic Compilation Demo in VB
REM translated from the C# code found on Internet.
REM by Qin Yongliang, 20120831
REM feel free to use the code for any purpose
Imports System.CodeDom.Compiler
Imports Microsoft.VisualBasic
Imports Microsoft.CSharp
'optional.
Imports System.Reflection
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Button1.Text = "Compiling..."
Me.Enabled = False
Me.Refresh()
Dim cpara = New CompilerParameters
cpara.CompilerOptions = Trim(TextBox2.Text)
'options like "/optimize" or whatever
cpara.GenerateInMemory = True
'stores the compile result in memory.
cpara.IncludeDebugInformation = False 'we are unlikely to debug it
'cpara.ReferencedAssemblies.Add("mscorlib.dll")
'cpara.ReferencedAssemblies.Add("system.dll")
'add references if needed.
Dim cdp = CodeDomProvider.CreateProvider("VisualBasic")
'self-explaining
Dim res = cdp.CompileAssemblyFromSource(cpara, TextBox1.Text) 'show results
'MsgBox(res.Errors(0).ToString)
'check if errors occur.
Dim asm = res.CompiledAssembly 'as System.Reflection.Assembly
Dim newclass = asm.CreateInstance("newclass") 'create instance from compiled assembly
Dim newclasstype = newclass.GetType
Button1.Text = "Running..."
Dim ret As Double = newclasstype.GetMethod("test").Invoke(newclass, Nothing)
'assume the code returns a number; assume the code has no parameters("Nothing");
Button1.Text = "Finished!"
MsgBox(ret.ToString, , "Result of test()") 'show result of the invoked method
Button1.Text = "Compile and Run"
Me.Enabled = True
End Sub
End Class