c# - 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>
谢谢你的帮助!
解决方案
我的猜测是您可能正在为此阅读 API(更新到相应的 .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 并遵守 API。我想后者可能是最合适的,但最终这取决于你的情况的细微差别。
推荐阅读
- python - 从文件中读取文本并使用 python 附加到 selenium 中的链接
- python - 导入包python
- javascript - 将 RN 的 Native WebView 'postMessage' 反应为空的 Web 消息
- woocommerce - Woocommerce - 显示统一运费而不是计算器
- bash - 更改命令退出代码,使其始终返回 0
- docker - Logrotate 不适用于每日和大小
- android - Android Jetpack Compose:如何显示字符串资源中的样式文本
- python - 创建 docker 和 anaconda
- java - 如何将数字分配给数组中的元素
- python - Pandas 按组过滤最小