首页 > 解决方案 > CodeDom 编译器版本问题

问题描述

我正在使用 CodeDom 来编译我的源代码。我正在尝试像这样设置目标框架:

            Dictionary<string, string> providerOptions = new Dictionary<string, string>() { { "CompilerVersion", "v4.0" } };

CodeDomProvider objCodeCompiler = new Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider(providerOptions)

但这不起作用,我收到以下错误: 错误图片

我试图在 app.config 中选择 CompilerVersion 但这也不起作用:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/></startup>
<appSettings>
<add key="aspnet:RoslynCompilerLocation" value="roslyn"/>
</appSettings>
  <system.codedom>
    <compilers>
      <!-- zero or more compiler elements -->
      <compiler
        language="c#;cs;csharp"
        extension=".cs"
        type="Microsoft.CSharp.CSharpCodeProvider, System,   
          Version=2.0.1.0, Culture=neutral,   
          PublicKeyToken=b77a5c561934e089"
        compilerOptions="/optimize"
        warningLevel="4" >
        <providerOption
          name="CompilerVersion"
          value="v4.6" />
      </compiler>
    </compilers>
  </system.codedom>
</configuration>

谢谢你的帮助!

标签: c#

解决方案


我的猜测是您可能正在为此阅读 API(更新到相应的 .NET 版本):

https://docs.microsoft.com/en-us/dotnet/api/microsoft.csharp.csharpcodeprovider

但是,您使用的软件包可能是这个:

https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform

简而言之,CSharpCodeProvider(和后端编译器)是不同的。我不确定是否有 API 文档,但来源在这里:

https://github.com/aspnet/RoslynCodeDomProvider/blob/a47558d50056fed7b745cfdfebc392e0e82e1b8d/src/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/CSharpCodeProvider.cs

此外,根据此处的第 27 行,指定 CompilerVersion 似乎为 N/A:

https://github.com/aspnet/RoslynCodeDomProvider/blob/master/src/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/Util/IProviderOptions.cs

我想您的解决方案是使用 Microsoft.CSharp.CSharpCodeProvider (即new new Microsoft.CodeDom.CSharpCodeProvider(providerOptions))或使用 Roslyn 并遵守 API。我想后者可能是最合适的,但最终这取决于你的情况的细微差别。


推荐阅读