哪个 C# 编译器版本可以使用 CSharpCodeProvider 类编译 C# 7.3?

Posted

技术标签:

【中文标题】哪个 C# 编译器版本可以使用 CSharpCodeProvider 类编译 C# 7.3?【英文标题】:Which C# compiler version to compile C# 7.3 with the CSharpCodeProvider class? 【发布时间】:2018-10-18 20:12:18 【问题描述】:

我想使用 Microsoft.CSharp.CSharpCodeProvider 类来编译 C# 7.3 代码。编译器版本在 IDictionary 中指定,在创建新的 CSharpCodeProvider 时将其作为输入;例如, "CompilerVersion", "v4.0" 。 “v4.0”是不够的,因为它不能将 v7.3 识别为编译器选项。

【问题讨论】:

【参考方案1】:

较新的编译器版本不再作为 .NET Framework 的一部分提供,因此默认情况下无法通过旧版 CodeDOM API(包括 Microsoft.CSharp.CSharpCodeProvider)访问。

如果您希望将 CodeDOM API 与较新的编译器一起使用,则您希望使用 Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider,它是 Microsoft.CSharp.CSharpCodeProvider 的子类。此类在 Microsoft.CodeDom.Providers.DotNetCompilerPlatform nuget 包中可用。

对于非 Web 应用程序,您还需要提供配置或环境变量,以提供您要使用的 C# 编译器的路径(nuget 包中提供了一份副本,因此您可以使用它)。详情请见https://github.com/aspnet/RoslynCodeDomProvider。

【讨论】:

对于 web.config ? compiler language="c#;cs;csharp" ? @Kiquenet 添加 nuget 包时,它通常会运行 powershell 脚本来更新 web.config。如果没有,你想要的是:<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=3.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:7.0 /nowarn:1659;1699;1701;612;618" />。当然,如果需要,您可以在其中进行一些调整。

以上是关于哪个 C# 编译器版本可以使用 CSharpCodeProvider 类编译 C# 7.3?的主要内容,如果未能解决你的问题,请参考以下文章

c#编写的代码用:linq和传统的ado.net哪个好,出错少,哪个更快,对服务器的负担最小

我使用的是哪个版本的 C#

C#能不能把CS-SCRIPT的脚本编译成DLL?如果可以,是调用哪个类?

如何在 Ranorex 中升级 C# 编译器版本?

在哪个 .Net Framework 版本 C# 7.2 可用

有没有办法确定使用哪个版本的 Visual Studio 来编译静态库?