Vb.net 用CodeDom编译VB代码

Vb.net 用CodeDom编译VB代码,vb.net,codedom,Vb.net,Codedom,仔细阅读,找不到对我有用的东西。 基本上,我的参考资料中有一个名为SourceCode.vb的文件。 我正在尝试使用: Dim objCodeCompiler As System.CodeDom.Compiler.ICodeCompiler = New VBCodeProvider().CreateCompiler Dim objCompilerParameters As New System.CodeDom.Compiler.CompilerParameters() objCompilerPa

仔细阅读,找不到对我有用的东西。 基本上,我的参考资料中有一个名为SourceCode.vb的文件。 我正在尝试使用:

Dim objCodeCompiler As System.CodeDom.Compiler.ICodeCompiler = New VBCodeProvider().CreateCompiler
Dim objCompilerParameters As New System.CodeDom.Compiler.CompilerParameters()
objCompilerParameters.ReferencedAssemblies.Add("System.dll")
objCompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll")
objCompilerParameters.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll")
objCompilerParameters.ReferencedAssemblies.Add("System.Drawing.dll")
objCompilerParameters.ReferencedAssemblies.Add("System.Data.dll")
objCompilerParameters.ReferencedAssemblies.Add("System.Deployment.dll")
objCompilerParameters.ReferencedAssemblies.Add("System.Xml.dll")
objCompilerParameters.GenerateExecutable = True
objCompilerParameters.GenerateInMemory = False
objCompilerParameters.CompilerOptions = "/target:winexe"
objCompilerParameters.OutputAssembly = "C:\"
Dim strCode As String = My.Resources.SourceCode.ToString
Dim objCompileResults As System.CodeDom.Compiler.CompilerResults = objCodeCompiler.CompileAssemblyFromSource(objCompilerParameters, strCode)
If objCompileResults.Errors.HasErrors Then
    MsgBox("Error: Line>" & objCompileResults.Errors(0).Line.ToString & ", " & objCompileResults.Errors(0).ErrorText)
    Exit Sub
End If
我需要它来编译代码、生成文件并将其放在C:\-出于某种原因,它无法工作。错误是:

错误:行>0,未指定输入源

有什么想法吗?提前谢谢


编辑:问题是我需要在输出后添加文件的实际名称。感谢您的帮助。

这实际上是因为您正在将OutputAssembly设置到一个位置,而它需要一个程序集名称。应该是:

objCompilerParameters.OutputAssembly = "AssemblyName.exe"
如果要设置输出程序集的位置,请将其添加到编译器选项中

objCompilerParameters.CompilerOptions = "/target:winexe /out:C:\\AssemblyName.exe"

尽管如此,我相信如果您想写入C:drive,您需要以管理员身份运行程序。

您确定源代码确实包含在strCode中吗?我100%确定,刚刚检查过。嗯,这不是一个很好的错误消息。它实际上是在抱怨你的输出装配任务。您必须指定文件名,而不是目录名。比如“c:\test.exe”。您也不应该使用它,因为您无法写入c:驱动器的根目录。如果你完全省略它会更好,你会在临时目录中得到一个程序集。谢谢Hans,这很有效!