2012-02-12 113 views
2

我一直在試圖讓CodeDom工作,所以我可以在運行時動態地爲我的應用程序創建代碼。然而,經過許多教程和試驗和錯誤之後,我遇到了一個我似乎無法通過的問題。我不斷收到編譯器錯誤的代碼,看起來應該像它應該。當我的代碼中沒有任何'\'時,我會得到「無法識別的轉義序列'\'」。CodeDom編譯器C#

我得到的誤差都在1號線在這裏,他們是爲了: CS1009 CS1056(連續3次) CS0116

以下是我有:

的代碼是編譯:

using System; 
using System.Windows.Forms; 
namespace sdjkfhj 
{  
    public class Sample 
    { 
     public static void main() 
     { 
      MessageBox.Show("Working"); 
      return; 
     } 
    } 
} 

,編譯器代碼如下:

public void Compile(string file) 
    { 
     var prov = new Dictionary<string, string>(); 
     prov.Add("CompilerVersion", "v2.0"); 
     CSharpCodeProvider c = new CSharpCodeProvider(); 
     ICodeCompiler comp = c.CreateCompiler(); 

     CompilerParameters param = new CompilerParameters(); 
     param.GenerateExecutable = true; 
     param.OutputAssembly = file + ".exe"; 
     param.ReferencedAssemblies.Add("System.dll"); 
     param.ReferencedAssemblies.Add("System.Windows.Forms.dll"); 
     if (c.Supports(GeneratorSupport.EntryPointMethod)) 
      param.MainClass = "Sample"; 

     CompilerResults results = comp.CompileAssemblyFromSource(param, file); 

     if (results.Errors.Count > 0) 
     { 
      foreach (CompilerError CompErr in results.Errors) 
      { 
       MessageBox.Show("Line number " + CompErr.Line + ", Error Number: " + CompErr.ErrorNumber + ", '" + CompErr.ErrorText + ";" + Environment.NewLine + Environment.NewLine); 
      } 
     } 
    } 

有沒有我沒有做的事來編譯它的權利?有什麼我失蹤?我有點迷失在這裏。提前致謝。

+0

該行給出的錯誤嗎?它在VS編譯? – 2012-02-12 04:22:17

+0

不應該'CompileAssemblyFromSource()'包含了'源'而不是'文件'? – C4u 2015-04-20 10:02:31

回答

5

三件事情浮現在腦海中馬上:

  1. 有代碼中沒有分號你試圖編譯。
  2. 如果Main應該是您的入口點,請將其設爲靜態。
  3. 讓你的源文件比目標文件不同(類似param.OutputAssembly = file + ".exe";

修復這些真的只是第一步,你還必須配置你的輸出需要引用的組件,它不會是一個壞主意,設置MainClass在您使用的是該CompilerParameters。

A nice example on MSDN

+0

編輯:我編輯代碼來表示已更改。 - 分號的東西已經放入。我想我忘了在粘貼之前忘了重新添加它們。無論如何:將Main更改爲靜態,請檢查。添加所有資源DLL,檢查。 MainClass =「Sample」,檢查。文件輸出名稱不同,請檢查。結果:完全相同的行上有5個相同的錯誤。這是我沒有得到的,所有這些變化都是有意義的,但輸出結果並不代表這一點。我甚至基本上從msdn複製源碼,但沒有成功。感謝您的幫助,但我必須繼續關注它。 – ozdrgnaDiies 2012-02-12 04:55:22

+2

將'CompileAssemblyFromSource'更改爲'CompileAssemblyFromFile' – mlorbetske 2012-02-12 05:10:43

+0

謝謝,這是我的一個非常簡單的錯誤。將它更改爲FromFile並將MainClass更改爲Namespace.Classname而不僅僅是Classname之後,我將其編譯。感謝您指出,現在所有作品。 – ozdrgnaDiies 2012-02-12 05:24:05