【问题标题】:Compiling with CodeDomProvider doesn't allow new features of C# or VB使用 CodeDomProvider 编译不允许 C# 或 VB 的新功能
【发布时间】:2008-12-19 00:42:03
【问题描述】:

我正在使用 CodeDomProvider、CompilerInfo 和 CompilerParameters 在运行时编译一些 C# 和 VB 代码。它工作得很好,我真的很喜欢能够为我的应用程序添加脚本支持,但它似乎只支持 .NET 2.0 语法。例如,C# 不支持 var 关键字,VB 不支持 If(bool, string, string) 表达式。

如何告诉它以 3.5 框架为目标?

【问题讨论】:

    标签: c# .net vb.net scripting


    【解决方案1】:

    好的,我从Anders Norås 发现了一个重要提示,即 CSharpCodeProvider 构造函数有一个构造函数,它接受一些选项,包括编译器版本。当我检查MSDN docs 时,我发现在 App.config 文件中指定编译器选项更简洁。这是一个例子:

    <system.codedom>
      <compilers>
        <compiler
          language="vb;vbs;visualbasic;vbscript"
          extension=".vb"
          type="Microsoft.VisualBasic.VBCodeProvider, System, 
            Version=2.0.3600.0, Culture=neutral, 
            PublicKeyToken=b77a5c561934e089"
          compilerOptions="/optimize"
          warningLevel="1" >
          <providerOption
            name="CompilerVersion"
            value="v3.5" />
        </compiler>
        <compiler
          language="c#;cs;csharp"
          extension=".cs"
          type="Microsoft.CSharp.CSharpCodeProvider, System, 
            Version=2.0.3600.0, Culture=neutral, 
            PublicKeyToken=b77a5c561934e089"
          compilerOptions="/optimize"
          warningLevel="1" >
          <providerOption
            name="CompilerVersion"
            value="v3.5" />
        </compiler>
      </compilers>
    </system.codedom>
    

    我唯一的失望是现在我从 CodeDomProvider.GetAllCompilerInfo() 获得了每个编译器的两个版本。配置文档说 App.config 应该覆盖 machine.config 设置,但我得到了两者。到目前为止,App.config 总是在 machine.config 之后,所以我只是让后面的覆盖前面的。有人知道如何避免重复吗?

    【讨论】:

    • 重新避免重复:看起来 MSDN 文档中存在矛盾:在<system.codedom> Element 我对备注中的注释的阅读是配置文件最初并未针对 Framework 2.0 引用,但 @987654324 @ 说他们是,就像 Element.
    【解决方案2】:

    不确定您将 app.config 放在哪里,但这里是您如何告诉它使用 3.5 框架的方法。

    var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
    

    http://blogs.msdn.com/lukeh/archive/2007/07/11/c-3-0-and-codedom.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-06
      • 1970-01-01
      • 2012-09-23
      相关资源
      最近更新 更多