哪个 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#能不能把CS-SCRIPT的脚本编译成DLL?如果可以,是调用哪个类?