【问题标题】:CS1617: Invalid option ‘6’ for /langversion; must be ISO-1, ISO-2, 3, 4, 5 or DefaultCS1617:/langversion 的选项“6”无效;必须是 ISO-1、ISO-2、3、4、5 或默认值
【发布时间】:2015-09-03 15:41:57
【问题描述】:

在 Windows 2008 Server 机器上运行新的 ASP.NET MVC 应用程序(直接来自 VS 2015 社区)时不断收到该错误。

【问题讨论】:

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


【解决方案1】:

很多人都在碰它,所以我想在这里发帖。

感谢这个人: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

为我修好了。谢谢他。

【讨论】:

  • 非常感谢对我的帮助。
  • 这只是告诉编译器使用 C# 版本 5 而不是 6 进行编译,如果您正在制作 .NET 4.6 项目,这不是您想要的...您真正需要更改的是编译器类型,就像这个问题的另一个答案中显示的一样!
  • 或者删除 块本身,它也将解决问题。
  • 在哪里改这个?我的意思是我需要把这段代码放在哪里?
  • 把它放在你的 web.config 或 app.config 文件中
【解决方案2】:

如果您想使用 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 自己更新这些行会更好。
  • 这应该是正确的答案,因为它实际上解决了问题并允许编译器使用最新版本而不是回退到旧版本
  • 同意 SM3RKY - 这个答案更相关,因为它解决了问题,而不是绕过它!
  • 如果您使用 VS 2015 Community 或以下版本将现有项目的解决方案升级到 .net 4.6,则会出现此错误。更新 VS 2015 Update 3 后,新项目默认提供此修复。然而,答案是确切的解决方法!
  • 这解决了我在使用 ASP.NET (webforms) 和 VB.NET 的 .Net 4.6.2 项目中的问题
【解决方案3】:

在我的情况下,错误是:

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

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

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

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

<LangVersion>6</LangVersion>

错误消失了!

【讨论】:

  • 非常感谢!现在在 VS2015 和 Unity2018 中调试可以工作了
  • 不需要在记事本中完全打开,但可以从visual studion上传项目然后编辑项目,这也将解决这个问题。
  • 我的csproj中什至没有LangVersion,当我通过VS打开构建设置时(右键单击proj->properties->build->advanced),lang版本说“根据框架自动选择版本”。按照这个答案中的建议将 LangVersion 6 添加到 csproj 的 PropertyGroup 为我修复了它!
【解决方案4】:

我发现在我的案例中导致错误的直接原因是:

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

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

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

【讨论】:

  • 在检查了所有其他人之后,这个答案对我有所帮助。谢谢
  • 这个答案也适用于我尝试运行设置为 C# 8 的项目的情况,但我的 Visual Studio 2017 不支持它。仅 VS 2019
【解决方案5】:

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

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

我可以运行这个项目。

【讨论】:

    【解决方案6】:

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

    【讨论】:

    • 这里也一样,在我的情况下,我安装了 MSBuild 工具并使用了来自“C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe”的 msbuild
    【解决方案7】:

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

    【讨论】:

      【解决方案8】:

      不要将语言版本从 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
      

      【讨论】:

        【解决方案9】:

        原来这是一个问题,因为 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

        【讨论】:

          【解决方案10】:

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

          【讨论】:

            【解决方案11】:

            如果以上所有选项都不起作用,并且您使用了 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 引起的。
            【解决方案12】:

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

            see this

            【讨论】:

              【解决方案13】:

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

              【讨论】:

                【解决方案14】:

                清理解决方案并重新构建 就我而言,无论先前的设置因不匹配而被阻止。我导入了一个新项目并构建它,尝试更改版本等等。 清理解决方案并构建对我有用。

                【讨论】:

                  【解决方案15】:

                  就我而言,我正在从 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 后,错误立即消失了。

                  【讨论】:

                    【解决方案16】:

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

                    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”文件夹在编译。

                    【讨论】:

                      【解决方案17】:

                      当我将回购移动到新位置后将其拉下时,这发生在我身上。解决方案是卸载并重新加载显示此错误的每个项目。

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

                      【讨论】:

                        【解决方案18】:

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

                          <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# 版本。

                        【讨论】:

                          【解决方案19】:

                          我收到了同样的错误。

                          就我而言,解决方案很简单。

                          首先,打开你的asp.net项目的属性,

                          然后点击 Typescript Build 并验证您选择的 typescript 版本。

                          在我的例子中,选择的版本是 2.5(不可用),

                          因此,为 Use latest available 选项更改此设置后,我的代码已修复。

                          之前:TypeScript version with error (image)
                          之后:TypeScript version fixed (image)

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 2020-11-01
                            • 2022-10-20
                            • 1970-01-01
                            • 2022-06-26
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            相关资源
                            最近更新 更多