Compile VB.NET "onthefly"
Halli Hallo,
hab jetzt leider ein größeres Problem.
Ich möchte eine art Builder für mein Server schreiben. Hab auch eine Function in VB.Net die eine .exe aus nem string generiert.
leider schaffe ich es aber nicht aus meinem gültigen vb.net code ne exe zu bekommen:
Code:
Public Function Compile(ByVal v_Source As String) As System.CodeDom.Compiler.CompilerResults
Dim provider As Microsoft.VisualBasic.VBCodeProvider
Dim compiler As System.CodeDom.Compiler.ICodeCompiler
Dim params As System.CodeDom.Compiler.CompilerParameters
Dim results As System.CodeDom.Compiler.CompilerResults
params = New System.CodeDom.Compiler.CompilerParameters
params.GenerateInMemory = True 'Assembly is created in memory
params.TreatWarningsAsErrors = False
params.WarningLevel = 4
'Put any references you need here - even you own dll's, if you want to use one
Dim refs() As String = {"System.dll", "Microsoft.VisualBasic.dll"}
params.ReferencedAssemblies.AddRange(refs)
params.GenerateExecutable = True
Try
provider = New Microsoft.VisualBasic.VBCodeProvider
compiler = provider.CreateCompiler
results = compiler.CompileAssemblyFromSource(params, v_Source)
Return results
Catch ex As Exception
'Compile errors don't throw exceptions; you've got some deeper problem...
MessageBox.Show(ex.Message)
Return Nothing
End Try
End Function
End Class
aber selbst an den "simpelsten" programm scheitere ich:
Code:
strb = "Public Class Form1 " & vbNewLine
strb &= "Public Shared Sub Main()" & vbNewLine
strb &= "MessageBox.Show()" & vbNewLine
strb &= "End Sub" & vbNewLine
strb &= "End Class" & vbNewLine
Debug.WriteLine(strb)
Dim cr As System.CodeDom.Compiler.CompilerResults = Compile(strb)
--> Der Name MessageBox wurde nicht deklariert.
Muss ich irgendwie ne dll von visual basic.net einbinden?
wie funktioniert das mit labels etc? woher weis der compiler wo die liegen sollen?
bitte um hilfe :-/