CS1617:/ langversion的选项“ 6”无效;必须为ISO-1,ISO-2、3、4、5或默认值


89

在Windows 2008 Server计算机上运行全新的ASP.NET MVC应用程序(直接来自VS 2015社区)时,不会出现该错误。


3
将语言版本降级为5。请查看:如何更改语言版本
NASSER 2015年

就我而言,我已将System.Web.Mvc.dll从5.2.3版本升级到5.2.7,它解决了此问题,因为版本不正确。
Dino Liu

在2019年发生了类似的错误。另请参见此相关GitHub问题
Uwe Keim

Answers:


103

很多人遇到它,所以我想在这里发布。

感谢这个人: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将底部的从6更改为5-langversion:5

为我修复。谢谢他


1
非常感谢,这对我有所帮助。
啊。

28
那只是告诉编译器使用C#版本5而不是6进行编译,如果您正在制作.NET 4.6项目,那不是您想要的...您真正需要更改的是编译器类型,如上所示这个问题的另一个答案!
Nuno Agapito 2015年

1
或删除<system.codedom>块本身,它也可以解决此问题。
Anupam Singh

5
改变这个在哪里?我的意思是我需要将此代码放在哪里?
坚不可摧的

将其放在您的web.config或app.config文件中
csharpforevermore

81

如果您想使用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>

那正是我想要的。将ASP.NET MVC项目从.NET Framework 4.5.2升级到4.6后,我开始出现此错误。我不确定,但是我认为如果Visual Studio自己更新这些行会更好。
Zignd

3
这应该是正确的答案,因为它实际上可以解决问题,并允许编译器使用最新版本,而不是回到旧版本
SM3RKY

1
同意SM3RKY-此答案更有意义,因为它可以解决问题,而不是绕过它!
乔恩·斯托利

如果使用VS 2015社区或以下版本将现有项目的解决方案升级到.net 4.6,则会发生此错误。更新VS 2015 Update 3之后,默认情况下,新项目将提供此修复程序。但是答案是确切的解决方法!
Mahmut C

这在使用ASP.NET(webforms)和VB.NET的.Net 4.6.2项目中为我解决了此问题
Eric Hewett

14

我发现我的错误的直接原因是:

建立->高级->语言版本

这是有道理的,因为错误表明存在无效的语言选项。

但是,此操作之前效果很好-因此必须选择它。什么改变了?原来,我的团队中的一名成员已升级到vs 2017,而我仍在使用2015。但是所选版本对我的vs版本不可用,因此为空白-因此出现错误。在语言下拉列表中选择一个值(我选择默认值)后,弹出一个新错误。新错误导致使用较新版本的c#的任何代码行上的构建失败。我更改了代码以执行相同的功能,但是使用了我的C#版本语法并解决了问题。

因此,虽然错误的直接原因确实是语言版本的选择无效,但根本原因是由于不同的vs / c#版本冲突。


1
检查所有其他内容后,此答案对我有所帮助。谢谢
MindRoasterMir

1
这个答案也适用于我的情况,我是想运行一个项目组到C#8,但它不是我的Visual Studio 2017只支持VS 2019
维尼修斯·加布里埃尔

13

就我而言,错误是:

错误CS1617 / langversion的选项'latest'无效;必须为ISO-1,ISO-2,默认值或1到6之间的整数。

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

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

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

<LangVersion>6</LangVersion>

错误消失了!


非常感谢你!现在,在VS2015和Unity2018中调试可以正常工作
8Observer8 '19

不必在记事本中完全打开,而是可以从Visual Studio上载项目,然后编辑项目,这也可以解决此问题。
尚图

12

就我而言,我使用的是错误的MSBuild.exe,该文件位于:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319

要解决该错误,我更新了PATH环境变量以开始使用Visual Studio 2017 MSBuild.exe:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSbuild.exe

请查看此链接以获取详细信息: 错误CS1056:在tfs连续集成过程中运行msbuild的意外字符'$'


同样在这里,就我而言,我安装了MSBuild工具并从“ C:\ Program Files(x86)\ MSBuild \ 14.0 \ Bin \ MSBuild.exe”中使用了msbuild
falstaff

9

就我而言(在另一个系统中创建项目):

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

我可以运行这个项目。


5

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

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

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

4

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


2

对我而言,最简单的解决方案是通过程序包管理器升级.Net编译器

安装包Microsoft.Net.Compilers

然后将Web.Config行更改为此

<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 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



0

我只是将其更改langversiondefault,它对我有用。VS 2015

<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:default /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>


0

清理解决方案并再次构建对于我而言,无论以前的设置是由于不匹配而被阻塞。我导入了一个新项目并对其进行了构建,并尝试更改版本等。清理解决方案并为我工作。


0

就我而言,我正在从GITHUB下载一个包含mattorg实现的keycloak示例代码的库: https //github.com/mattmorg55/Owin.Security.Keycloak/tree/dev/samples

当我使用.Net Framework 4.6.1时,该解决方案非常容易,但是该项目在开始使用4.6.2时就要求我。尽管我下载了它,但是当重新启动Visual Studion的所有实例(或者最好关闭所有实例)时,它是第一个被积极选择的。该项目被操纵为4.6.1(尽管我不希望这样做,所以选择了)。

因此,在我再次选择配置以选择.Net Framework 4.6.1之后,该错误立即消失了。


0

就我而言,错误消息是:

ASPNETCOMPILER:错误CS1617:/ langversion的选项“ 7.3”无效;必须为ISO-1,ISO-2,默认值或1到6之间的整数。

本GitHub问题VS开发人员社区中所述,这似乎是较旧的Microsoft.CodeDom.Providers.DotNetCompilerPlatform中的错误 NuGet包中。

将此NuGet程序包升级到3.6.0后,该错误仍然存​​在于我的Web应用程序中。

我发现必须删除Web应用程序中的旧“ bin \ Roslyn”文件夹才能完成此工作。

似乎较新的Microsoft.CodeDom.Providers.DotNetCompilerPlatform NuGet程序包(在我的情况下为3.6.0)不再带来自己的“ Rosyln”文件夹,并且如果存在的话,该旧的“ Roslyn”文件夹在编译过程中优先。


0

当我将存储库移到新位置后撤回存储库时,发生了这种情况。解决方案是先卸载然后重新加载显示此错误的每个项目。

我尝试了其他一些选择,但对我没有任何帮助。同样在这种情况下,我的配置文件被设置为使用languageversion 6,因此将它们设置为默认值并不能解决问题。


0

如果以上所有选项均无效,并且您使用了诸如Microsoft.Net.Compilers和CodeDom之类的nuget包,但仍无法正常工作,则说明您的项目文件打开了项目文件。项目文件使用的编译器选项之一不支持您选择的语言。使用记事本++打开项目文件,然后删除以下行。

原始项目文件

<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')" />
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.