2016-04-18 29 views
0

我想編譯幾個.cs文件到一個可執行程序。 我的CodeDomProvider沒有找到我寫入.cs文件的使用聲明。特別是下列錯誤消息被創建:如何在c#中包含使用聲明與CodeDomProvider?

- 命名空間'System'中的類型或命名空間'CodeDom'不可用。
- 名稱空間「系統」中的類型或命名空間「Windows」不可用。
- 無法找到類型或名稱空間「堆棧」。

從這個功能,我打電話CodeDomProvider:

private CompileParserSolution() 
    { 
     List<string> cSharpFiles = new List<string>(); 

     DirectoryInfo dir = new DirectoryInfo(Path.Combine(_inData.ProjectDir, @"NCParser\NCParser")); 

     foreach (FileInfo f in dir.GetFiles("*.cs")) 
     { 
      cSharpFiles.Add(Path.Combine(dir.FullName, f.Name)); 
     } 

     CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp"); 

     CompilerParameters cp = new CompilerParameters(); 
     cp.GenerateExecutable = true; 
     cp.OutputAssembly = "Parser_TEST.exe"; 
     cp.GenerateInMemory = true; 
     cp.TreatWarningsAsErrors = false; 
     cp.ReferencedAssemblies.Add("System.Linq.dll"); 
     cp.ReferencedAssemblies.Add("System.Text.RegularExpressions.dll"); 
     cp.ReferencedAssemblies.Add(Path.Combine(_inData.ProjectDir, @"NCParser\NCParser", @"QUT.ShiftReduceParser.dll")); 

     CompilerResults cr = provider.CompileAssemblyFromFile(cp, cSharpFiles.ToArray()); 
    } 

我的問題是,我怎麼能包括System.CodeDomSystem.WindowsSystem.Collections.Stack圖書館的入項目進行編譯。

用命令:

 cs.ReferencedAssemblies.Add("System.CodeDom.dll"); 
     ... 

這是行不通的!

+0

cp.ReferencedAssemblies.Add(「System.dll」); –

回答

2

程序集和名稱空間彼此不對應1:1。要查找某種類型的組件,請查看其MSDN文檔。

  • 沒有System.CodeDom.dll,很多CodeDOM類型都在System.dll中,您沒有參考。
  • Stack<T>同樣在System.dll中。
  • WPF分佈在幾個程序集中,基本類型在PresentationFramework.dll中。

引用這些程序集可能會解決您的問題。