如何在c#中使用带有CodeDomProvider的声明?

时间:2016-04-18 11:13:40

标签: c# codedom

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

  

- 类型或名称空间' CodeDom'在命名空间'系统'不可用。
   - 类型或命名空间' 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图书馆纳入要编译的项目中。

使用命令:

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

它不起作用!

1 个答案:

答案 0 :(得分:2)

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

  • 没有System.CodeDom.dll,很多CodeDOM类型都在System.dll中,你没有参考。
  • Stack<T>同样在System.dll中。
  • WPF分布在几个程序集上,基本类型在PresentationFramework.dll中。

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

相关问题