当前位置:  开发笔记 > 编程语言 > 正文

CSharpCodeProvider似乎陷入了.NET 2.0,我如何获得新功能?

如何解决《CSharpCodeProvider似乎陷入了.NET2.0,我如何获得新功能?》经验,为你挑选了1个好方法。

我有以下,相当标准的代码作为包装CSharpCodeProvider.这个类运行得很好,执行得很好,等等.但是,尽管我的应用程序是针对.NET 3.5构建的,并且在进行此编译时引用了v3.5程序集,但我仍然无法访问任何更好的C#3.5语法,如lambda或auto-properties.有没有办法让这个工作?

我的印象是这个课程刚刚开始csc.exe,我的防火墙似乎已经证实了这个想法(我的应用程序试图访问csc.exe).也许我只需要设置options.CompilerOptions一些东西?

protected virtual void Compile()
{
    Microsoft.CSharp.CSharpCodeProvider csProvider = new Microsoft.CSharp.CSharpCodeProvider();

    CompilerParameters options = new CompilerParameters();
    options.GenerateExecutable = false;
    options.GenerateInMemory = true;
    options.IncludeDebugInformation = true;

    foreach (string s in this.ReferencedAssemblies)
    {
        options.ReferencedAssemblies.Add(s);
    }

    CompilerResults result;
    string source = this.CodeTemplate;

    // [snip] Do some manipulation to fill in the template with values.

    result = csProvider.CompileAssemblyFromSource(options, source);

    this.HasErrors = result.Errors.HasErrors;
    this.Errors = new CompilerError[result.Errors.Count];
    result.Errors.CopyTo(Errors, 0);

    if (HasErrors && ThrowOnErrors)
        throw new InvalidProgramException("The code currently stored in the " + this.GetType() + " cannot be compiled.");
    else if (HasErrors)
        return;
    this.CompiledAssembly = result.CompiledAssembly;
}

编辑:

我引用mscorlib,System.Core,System.Text和此刻的我自己的组件之一.



1> Jon Skeet..:

有一个编译器标志,你可以传递给构造函数(在字典中):

Dictionary options = new Dictionary
{ 
    { "CompilerVersion", "v3.5" }
};

var compiler = new CSharpCodeProvider(options);

无论如何,这对我有用...

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有