2015-08-21 75 views
1

阅读它,找不到任何适合我的东西。 基本上,我的资源中有一个名为SourceCode.vb的文件。 我试图使用方法:使用CodeDom编译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:\ - 出于某种原因,它不工作。错误是:

error: line>0, no input sources specified

任何想法?提前致谢。

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

+0

你确定你的源代码实际上包含在strCode中吗? https://msdn.microsoft.com/en-us/library/a0kc0z48(v=vs.90).aspx – Whitey

+0

进出口100%肯定,只是检查。 – suffice

+2

好吧,那不是一个奇妙的错误信息。它*实际上*抱怨你的OutputAssembly分配。您必须指定文件名称,而不是目录名称。像“c:\ test.exe”一样。你也不应该使用它,你不能写入c:盘的根目录。如果完全忽略它,则会更好,您将在TEMP目录中获得程序集。 –

回答

2

它实际上是因为当它预计集名称你OutputAssembly设置的位置。它应该是:

objCompilerParameters.OutputAssembly = "AssemblyName.exe" 

如果要设置输出程序集的位置,请将其添加到您的编译器选项。

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

虽然,我相信,如果你想写入C:驱动器,你将需要运行程序作为管理员。