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

时间:2015-09-03 15:41:58

标签: c# asp.net asp.net-mvc iis

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

19 个答案:

答案 0 :(得分:93)

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

感谢这个家伙发现了一个疯狂的简单解决方法:Expertdebugger

只需将您的语言版本从C#6降级到C#5,就像这样:

DataGridViewSelectedRowCollection

<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> 从6更改为5 - langversion:6

为我修好了。谢谢他。

答案 1 :(得分:73)

如果您想使用C#6.0:

  1. 确保您的项目的.NET版本高于4.5.2。
  2. 然后检查您的.config文件以执行以下修改。
  3. 查找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>
    

答案 2 :(得分:7)

在我的情况下,我使用了错误的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

请参阅此链接了解详情:Error CS1056: Unexpected character '$' running the msbuild on a tfs continuous integration process

答案 3 :(得分:7)

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

build -> advanced -> language version

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

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

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

答案 4 :(得分:4)

不要将语言版本从6更改为5,而是更改&#34;类型&#34;来自

的编译器标记的属性
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

答案 5 :(得分:3)

在我的情况下,错误是:

  

错误CS1617 / langversion的选项“ latest”无效;一定是   ISO-1,ISO-2,默认值或1到6之间的整数。

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

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

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

<LangVersion>6</LangVersion>

错误消失了!

答案 6 :(得分:2)

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

答案 7 :(得分:1)

如果以上所有选项均无效,并且您使用了诸如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')" />

答案 8 :(得分: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

答案 9 :(得分:0)

对我来说,我从属性组中删除了 .csproj 文件中的一行 (<LangVersion>7.3</LangVersion>)

  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'MyProject|AnyCPU'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\x86\Myproject\</OutputPath>
    <DebugType>full</DebugType>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <LangVersion>7.3</LangVersion>
  </PropertyGroup>

现在一切正常。 .Net Framework 必须有可能单独选择需要使用哪个版本的 C#。

答案 10 :(得分:0)

当我将回购移至新位置后撤回回购时,这发生在我身上。解决方案是先卸载然后重新加载显示此错误的每个项目。

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

答案 11 :(得分:0)

在我的情况下,错误消息是:

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

stated in this GitHub issuethis VS Developer Community post一样,这似乎是旧版 Microsoft.CodeDom.Providers.DotNetCompilerPlatform NuGet包中的错误。

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

解决方案

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

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

答案 12 :(得分: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之后,该错误立即消失了。

答案 13 :(得分:0)

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

答案 14 :(得分:0)

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

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

我可以运行这个项目。

答案 15 :(得分:0)

我只是将langversion更改为default,对我有用。 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>

答案 16 :(得分:0)

在这种情况下,请尝试使用vs 2019,希望对您有所帮助

答案 17 :(得分:0)

我已经将Microsoft.Net.Compilers更新到2.0版或更高版本

see this

答案 18 :(得分:0)

对我来说最简单的解决方案是通过程序包管理器升级.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>