2016-04-18 5 views
0

Ich möchte mehrere .cs-Dateien zu einem ausführbaren Programm kompilieren. Mein CodeDomProvider findet nicht die Verwendung von Deklarationen, die ich in die .cs-Dateien geschrieben habe. Insbesondere folgende Fehlermeldungen werden erzeugt:Wie können Deklaratives mit CodeDomProvider in C# eingebunden werden?

-Der Typ- oder Namespace 'CodeDom' im Namespace 'System' ist nicht verfügbar.
-Der Typ- oder Namespace 'Windows' im Namespace 'System' ist nicht verfügbar.
-Der Typ- oder Namespace 'Stack' konnte nicht gefunden werden.

Aus dieser Funktion, ich rufe die 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()); 
    } 

Meine Frage ist, wie kann ich die System.CodeDom, System.Windows und die System.Collections.Stack librarys in das Projekt gehören zu kompilieren.

Mit dem Befehl:

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

es funktioniert nicht!

+0

cp.ReferencedAssemblies.Add ("System.dll"); –

Antwort

2

Baugruppen und Namespaces stimmen nicht 1: 1 überein. In welcher Assembly ein bestimmter Typ zu finden ist, finden Sie in der MSDN-Dokumentation.

  • Es gibt keine System.CodeDom.dll, viele der CodeDOM-Typen befinden sich in der System.dll, auf die Sie nicht verwiesen haben.
  • Stack<T> ist ebenfalls in System.dll.
  • WPF ist auf mehrere Assemblys verteilt, die Basistypen befinden sich in PresentationFramework.dll.
  • Referenzieren dieser Baugruppen wird wahrscheinlich Ihr Problem beheben.

    Verwandte Themen