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

C# CS1617:无效选项‘;6’;for/langversion;必须是ISO-1、ISO-2、3、4、5或默认值,c#,asp.net,asp.net-mvc,iis,C#,Asp.net,Asp.net Mvc,Iis,在Windows 2008服务器计算机上运行新的ASP.NET MVC应用程序(直接来自VS 2015社区)时不断出现该错误 很多人都会遇到它,所以我想在这里发布 找到了一个非常简单的解决方法,多亏了这个家伙: 只需将您的语言版本从C#6降级到C#5,如下所示: <system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs&

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

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

找到了一个非常简单的解决方法,多亏了这个家伙:

只需将您的语言版本从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

帮我修好了。谢谢他。

如果您想使用C#6.0:

  • 确保项目的.NET版本高于4.5.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>
    

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

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


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

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

    在我的例子中,我使用了错误的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
    

    有关详细信息,请参见此链接:

    我发现我的案例中出现错误的直接原因是:

    这是有意义的,因为错误表明存在无效的语言选项

    但是,这在以前工作得很好,所以它一定是被选中的。什么改变了?我的团队中有一名成员升级到vs 2017,而我还在使用2015。在他对项目进行更改后,语言版本发生了更改,我收到了源代码管理的更改。但是所选的版本对我的vs版本不可用,所以它是空的-因此出现了错误。在语言下拉列表中选择了一个值(我选择了默认值)之后,出现了一个新的错误。新错误导致使用较新版本c#的任何代码行的生成失败。我更改了代码以执行相同的功能,但我的c版本语法和问题得到了解决


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

    在我的案例中,错误是:

    错误CS1617/langversion的“最新”选项无效;必须是 ISO-1、ISO-2、默认值或范围为1到6的整数

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

    <PropertyGroup>
        <LangVersion>latest</LangVersion>
    </PropertyGroup>
    
    
    最新的
    
    我更改了范围为1到6的整数的最新值

    <LangVersion>6</LangVersion>
    
    6
    

    错误消失了

    我已将Microsoft.Net.Compiler更新为2.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>
    
    
    

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

  • 清理项目(在解决方案资源管理器中右键单击项目,然后单击 清洁物品)
  • 然后构建项目(右键单击解决方案中的项目 资源管理器,然后单击“生成项目”)

  • 我可以运行此项目。

    结果表明这是一个问题,因为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 我是如何解决这个问题的还不是很清楚。VisualStudio可以建议或暗示,通过我在项目设置中选择新版本,该设置现在与安装到项目中的包冲突

    (我最后打开了诊断级别的MSBuild日志记录,以找出IDE真正要使用的CSC.EXE)


    清洁溶液并重新构建 在我的例子中,由于不匹配,以前的设置都被阻塞了。我导入了一个新项目并进行了构建,尝试更改版本等等。
    清理解决方案和构建对我来说很有用。

    在我的例子中,我从GITHUB下载了一个库,其中包含mattorg实现KeyClope的示例代码:

    解决方案非常简单,因为我使用了.NETFramework4.6.1,但项目一开始就要求我使用4.6.2。虽然我下载了它,但在重新启动所有可视化研究实例(或者最好关闭所有实例)时,它首先被主动选择。该项目被操纵到4.6.1(尽管我不希望也选择这样)


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

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

    ASPNETCOMPILER:错误CS1617:对于/langversion,选项“7.3”无效;必须是ISO-1、ISO-2、默认值或范围为1到6的整数

    它似乎是旧的Microsoft.CodeDom.Providers.DotNetCompilerPlatform NuGet包中的一个bug

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

    解决方案 我发现我必须在我的Web应用程序中删除一个旧的“bin\Roslyn”文件夹才能正常工作


    新的Microsoft.CodeDom.Providers.DotNetCompilerPlatform NuGet软件包(在我的例子中是3.6.0)似乎不再带自己的“Rosyln”文件夹,如果有,则旧的“Roslyn”文件夹在编译过程中优先使用。

    当我取下我的repo a时,我就遇到了这种情况
    <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>
    
    <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')" />