我正在使用CodeDom编译我的源代码。我正在尝试这样设置目标框架:
Dictionary<string, string> providerOptions = new Dictionary<string, string>() { { "CompilerVersion", "v4.0" } };
CodeDomProvider objCodeCompiler = new Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider(providerOptions)但这不起作用,我得到以下错误:error image
我尝试在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>谢谢你的帮助!
发布于 2020-11-19 09:48:33
我的猜测是,您可能正在阅读相关的应用编程接口(更新到您相应的.NET版本):
https://docs.microsoft.com/en-us/dotnet/api/microsoft.csharp.csharpcodeprovider.
但是,您正在使用的包可能是这样的:
https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform
简而言之,CSharpCodeProvider (和后端编译器)是不同的。我不确定是否有相关的API文档,但源代码在这里:
此外,根据此处的第27行,指定CompilerVersion似乎为N/A:
我想你的解决方案是要么使用Microsoft.CSharp.CSharpCodeProvider (即new new Microsoft.CodeDom.CSharpCodeProvider(providerOptions)),要么使用Roslyn one并坚持使用API。我想后者可能是最合适的,但最终这取决于您的情况的细微差别。
https://stackoverflow.com/questions/59974229
复制相似问题