2016-04-18 12 views
0

複数の.csファイルを実行可能プログラムにコンパイルしたい。 私のCodeDomProviderは、.csファイルに書き込んだ使用宣言を見つけられません。特に以下のエラーメッセージが作成されます。C#でCodeDomProviderで宣言を使用する方法は?

- 名前空間 'System'の 'CodeDom'は使用できません。
- 名前空間 'System'の 'Windows'のタイプまたは名前空間は使用できません。
- タイプまたは名前空間 'Stack'が見つかりませんでした。

この機能から、私は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 librarysを含めることができるか、です。コマンドで

 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にあります。

これらのアセンブリを参照すると、問題が解決される可能性があります。

関連する問題