2015-08-21 107 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:驅動器,你將需要運行程序作爲管理員。