错误:/langversion的选项'6'无效;必须是ISO-1、ISO-2、3、4、5或默认。

92

我希望使用.NET 4.6,并通过将C#语言版本更改为6来利用最新的C#版本。

但是在编译过程中,我遇到了这个错误:

错误 /langversion 的选项“6”无效;必须为 ISO-1、ISO-2、3、4、5 或 Default

如果我将Web.Config设置中的/langversion:6更新为5,则可以正常工作。

  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701">

那么,我如何在不使用较低版本的语言的情况下解决这个问题呢?

我正在使用Visual Studio 2015 Community版,并且为了确保它未被默认安装,我已经手动安装了.NET Framework 4.6。

该项目是由Visual Studio 2015创建的标准ASP.NET MVC模板项目。


1
在我的情况下,我只需要删除/langversion:6... - bohdan_trotsenko
@modosansreves 这将恢复到默认的语言版本.. 我相信那是C# 5...请检查是否可以使用任何C# 6语言特性。 - Rosdi Kasim
确实。这样就无法使用C# 6的特性了。谢谢。 - bohdan_trotsenko
6个回答

91

在更改框架版本时,请注意Web.Config文件中的编译器“类型”:

对于4.5和C#5 -

type="Microsoft.CSharp.CSharpCodeProvider...

针对4.6版本和C#6 -

type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"

更多信息请参考此论坛帖子


20
这有效!尽管我认为这是Visual Studio 2015的一个漏洞,在我将应用程序重新指向到.NET 4.6和C# 6时,它没有自动更新。 - Rosdi Kasim
我认为你说得对。我也遇到了这个问题,然后偶然看到了你的问题。幸运的是,我找到了下一个链接就是答案。 - DrewB
1
是否存在适用于所有.NET目标的通用CSharpCodeProvider? - denfromufa
2
我的 web.config 文件中类型设置正确,并且语言版本设置为默认值 <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701" />。只需清理解决方案并在 VS 2019 中重新编译即可解决问题。 - joym8
这并没有真正告诉用户需要改变什么,或者准确地在哪里,更不用说为什么了。 - TylerH

39

更新以下NuGet软件包(无论安装哪个),以解决问题:

  • Microsoft.CodeDom.Providers.DotNetCompilerPlatform
  • Microsoft.Net.Compilers

我转换到了c# 6.0,但是包仍然是旧版本。将其从1.0更新到1.0.4对我有用。 - Mixxiphoid

14

1.打开项目并选择您的项目属性。

2.选择“构建”并单击“高级”按钮。

3.选择默认语言版本。

4.保存。

https://youtu.be/IP8feQeWqkk


在VS2013中遇到了这个错误。不幸的是,这个解决方案对我没有用。 - Jviaches
2
这个方法对我有效。所有其他建议的解决方案都围绕着更改web.config文件或者下载NuGet包/更新进行。编译器一直抛出关于无效版本的错误,这让我感到困惑,因为我在配置文件中没有设置过那个选项。结果发现高级构建属性没有被NuGet包更新自动更新。 - Kiran Ramaswamy

4
打开NuGet包管理器控制台,运行以下命令。
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r

3

如果项目没有完全升级到VS2015,我就会遇到这种情况。如果您在VS2013中打开从2015年开始的解决方案 - 您将会收到此错误。


我也这么认为,这个错误基本上意味着你需要安装VS2015!项目中的其他人正在使用2013无法处理的更新语言功能。 - JonnyRaa

0

我在第一次在Visual Studio 2019中加载应用程序时遇到了类似的问题。将"Microsoft.CodeDom.Providers.DotNetCompilerPlatform" nuget更新到较新的版本对我起了作用。


这重复了 https://dev59.com/3VwZ5IYBdhLWcg3wFM3D#42011205 中的解决方案。 - TylerH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接