如何在c#中包括对CodeDomProvider使用声明词?

如何在c#中包括对CodeDomProvider使用声明词?,c#,codedom,C#,Codedom,我想把几个.cs文件编译成一个可执行程序。 我的CodeDomProvider没有找到我写入.cs文件的using声明。特别是创建了以下错误消息: -命名空间“System”中的类型或命名空间“CodeDom”不可用。 -命名空间“System”中的类型或命名空间“Windows”不可用。 -找不到类型或命名空间“Stack” 通过此函数,我调用CodeDomProvider: private CompileParserSolution() { List<s

我想把几个.cs文件编译成一个可执行程序。 我的CodeDomProvider没有找到我写入.cs文件的using声明。特别是创建了以下错误消息:

-命名空间“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());
    }

它不起作用

程序集和名称空间之间不是1:1对应的。要查找特定类型的程序集,请查看其MSDN文档

  • 没有System.CodeDom.dll,许多CodeDom类型都在System.dll中,您没有引用它们
  • 堆栈
    同样位于System.dll中
  • WPF分布在多个程序集中,基本类型在PresentationFramework.dll中

引用这些程序集可能会解决您的问题。

程序集和名称空间之间的比例不是1:1。要查找特定类型的程序集,请查看其MSDN文档

  • 没有System.CodeDom.dll,许多CodeDom类型都在System.dll中,您没有引用它们
  • 堆栈
    同样位于System.dll中
  • WPF分布在多个程序集中,基本类型在PresentationFramework.dll中
引用这些程序集可能会解决您的问题。

cp.referencedAssemblys.Add(“System.dll”);添加(“System.dll”);
        cs.ReferencedAssemblies.Add("System.CodeDom.dll");
        ...