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

109
当在 Windows 2008 Server 机器上运行一个新的 ASP.NET MVC 应用程序(直接从 VS 2015 Community 中创建)时,我一直收到该错误。

4
将语言版本降级至5。查看:如何更改语言版本 - NASSER
1
在我的情况下,我已经将System.Web.Mvc.dll从版本5.2.3升级到5.2.7,因为版本不正确,所以它修复了这个问题。 - Dino Liu
3
2019年发生了类似的错误。另请参见与此相关的GitHub问题。 - Uwe Keim
19个回答

115

很多人都遇到了这个问题,所以我想在这里发布一下。

感谢这位Expertdebugger,他提供了一个非常简单的解决方法。

只需将语言版本从C# 6降级至C# 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">
        <providerOption name="CompilerVersion" value="v4.0"/>
      </compiler>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+">
          <providerOption name="CompilerVersion" value="v4.0"/>
      </compiler>
    </compilers>
</system.codedom>

将底部的langversion:6更改为5-langversion:5

对我有用,感谢他。


1
非常感谢,这对我很有帮助。 - AH.
39
这句话的意思是告诉编译器使用C# 5版本而不是6版本进行编译,但如果你正在创建一个.NET 4.6项目,这并不是你想要的...你真正需要改变的是编译器类型,就像另一个答案中展示的那样! - Nuno Agapito
2
或者直接删除<system.codedom>块,这也可以解决问题。 - Anupam Singh
7
这段代码需要放在哪里?我的意思是,我需要将它放在哪里? - Unbreakable
2
将它放入您的web.config或app.config文件中。 - csharpforevermore
这种方法可以解决问题,但是你应该升级/指定编译器。 - Raymond

93

如果您想要使用C# 6.0:

  1. 确保您的项目.NET版本高于4.5.2。
  2. 然后检查您的.config文件进行以下修改。

查找system.codedom并对其进行修改,以使其显示如下:

<system.codedom>
 <compilers>
  <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
  <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
 </compilers>
</system.codedom>

1
这正是我一直在寻找的。我在将一个ASP.NET MVC项目从.NET Framework 4.5.2升级到4.6后开始出现这个错误。我不确定,但我认为如果Visual Studio自己更新这些行会更好。 - Zignd
4
这应该被作为正确答案,因为它实际上修复了问题并允许编译器使用最新版本而不是退回到旧版本。 - SM3RKY
1
同意SM3RKY的观点 - 这个答案更相关,因为它解决了问题,而不是绕过它! - Jon Story
这对我在一个使用ASP.NET(WebForms)和VB.NET的.Net 4.6.2项目中解决了问题。 - Eric Hewett
1
这应该被标记为已接受的答案。确保我的框架是4.6.1;按上面所示更改了web.config块;正确重建。 - Jason P Sallinger
显示剩余3条评论

22

在我的情况下错误是:

Error CS1617 对于 /langversion,选项“latest”无效;必须是 ISO-1、ISO-2、Default 或范围为 1 到 6 的整数。

我用记事本打开了我的 .csproj 文件,并看到了这一行:

<PropertyGroup>
    <LangVersion>latest</LangVersion>
</PropertyGroup>

我将最新的值改为 1 到 6 范围内的整数

<LangVersion>6</LangVersion>

错误已消失!


非常感谢!现在在VS2015和Unity2018中进行调试工作。 - 8Observer8
1
不需要在记事本中打开,而是可以从Visual Studio上传项目并编辑项目,这也将解决此问题。 - Shantu
我的csproj中甚至没有LangVersion,当我通过VS打开构建设置(右键单击项目->属性->构建->高级),语言版本显示为“根据框架版本自动选择”。按照此答案建议将LangVersion 6添加到csproj的PropertyGroup中,问题得到了解决! - James L.

15

在我的情况下(在另一个系统中创建的项目):

  1. 清理项目(右键单击解决方案资源管理器中的项目,然后单击“清理项目”)。
  2. 然后构建项目(右键单击解决方案资源管理器中的项目,然后单击“生成项目”)。

我可以运行这个项目。


15

我发现在我的情况下导致错误的直接原因是:

build -> advanced -> language version

这很有道理,因为错误提示语句表明语言选项是无效的。

但是,在这之前它一直正常工作,所以它必须已经被选中了。什么改变了呢?原来我的团队成员升级到vs 2017,而我还在使用2015。他更改了项目后,语言版本发生了变化,然后我通过源代码控制接收到了这个变化。但是我的vs版本中未提供所选的版本,所以它为空 - 因此会出现错误。在语言下拉列表中选择一个值(我选择默认值)后,出现了新的错误。任何使用较新版本c#的代码行都会导致构建失败的新错误。我用我的c#版本语法修改了代码以执行相同的功能,问题解决了。

因此,尽管错误的直接原因确实是语言版本的无效选择,但根本原因是不同的vs/c#版本之间发生了冲突。


1
在查看了其他所有答案后,这个回答帮助了我。谢谢。 - MindRoasterMir
1
这个答案也适用于我的情况,我试图运行一个设置为C# 8的项目,但它不支持我的Visual Studio 2017。只有VS 2019。 - Vinícius Gabriel

13

我也是,我的情况下我安装了MSBuild工具并使用了"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe"中的msbuild。 - falstaff

6

不要将语言版本从6更改为5,而是将编译器标记上的“type”属性更改为

Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

to

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

6

将Microsoft.Net.Compilers Nuget包升级到最新版本(至少是2.x)


6

如果所有的选项都无法解决问题,并且您已经使用了类似于Microsoft.Net.Compilers和CodeDom之类的NuGet包,但仍然无法工作,则可能是您的项目文件存在问题。打开项目文件。项目文件正在使用其中一个不支持您选择的语言的编译器选项。使用Notepad++打开项目文件并删除以下行。

原始项目文件

<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props')" />
  <!--Don't delete below one-->
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />

移除以下行

  <Import Project="..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props')" />

这太棒了。这是由于 Microsoft.Net.Compilers nuget 的旧版本引起的。 - rollsch

3
原来这是一个问题,因为ASP.NET MVC 4项目引用了Microsoft.Net.Compilers包的特定版本。Visual Studio使用了这个特定包中的编译器,而不是计算机上其他安装的编译器。希望VS2019能够进行警告或提醒:-)
解决方案是将Microsoft.Net.Compilers包更新到较新版本。
1.x版本适用于C#6 2.x版本适用于C#7 3.x版本适用于C#8 我如何解决这个问题并不是立即显然的。Visual Studio可以建议或提示我在项目设置中选择新版本时,该设置现在与安装到项目中的包发生冲突。
(最终我打开诊断级别的MSBuild日志记录,以找出IDE正在尝试使用哪个CSC.EXE)

https://developercommunity.visualstudio.com/content/problem/519531/c-7x-versions-do-not-seem-to-work-in-vs2019.html


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