对于 /langversion,选项 '7.3' 无效;必须是 ISO-1、ISO-2、Default 或范围在 1 到 6 的整数。

23

我使用的是 Visual Studio 17(版本号为 15.8.5),我的项目目标 .NET Framework 4.8,我尝试设置要使用的 C# 版本(通过属性窗口中的“生成”选项卡),选择了C# 7.3(这是从下拉列表中可选的最大版本)。但是构建项目会报告与问题标题中相似的错误。我甚至尝试了 7.0C# latest minor version,但所有这些都报告了失败。

看起来环境仅支持最高版本为 6(C# 6.0)?

我已经尝试安装了 Microsoft.Net.Compilers v3.6.0Microsoft.Net.Compilers.Toolset v3.6.0,但没有改变什么。

我想使用以下简单代码的模式匹配功能:

object o ...
if(o is int c){
    //do something with c (cast to int) ...
}

更新:

奇怪的是,如果我创建一个全新的ASP.NET MVC项目,它只需要设置C# 7.3就可以编译通过。所以看起来只是我正在处理的特定项目有问题。为了更好地诊断,我想通过这个链接https://sites.google.com/site/ngaodaantoi/files/WebApiAuth.zip?attredirects=0&d=1分享该项目。

建议您使用VS 2017以便可能重新复制该问题。


2
为了解决这个问题,我会在源代码中加入 #error version 来确认所使用的编译器版本(这将输出编译器的版本),并使用 /langversion:? 列出可用的版本。 - Julien Couvreur
你是否安装了最新版本的Microsoft.Net.Compilers Nuget包? - DMadden51
@DMadden51 是的,我已经有了(在我的问题中已经提到),也安装了最新版本的 Microsoft.CodeDom.Providers.DotNetCompilerPlatform - Hopeless
@Hopeless 我感到困惑 :-/ Roslyn编译器版本2.9.x支持语言版本7.3(在此处有记录[https://github.com/dotnet/roslyn/wiki/NuGet-packages#versioning])。或许值得向ASP.NET团队询问。可能涉及多个编译器:IDE、Build和ASP.NET。查看构建日志会有所帮助(使用/binarylog选项,然后使用“MSBuild结构化日志查看器”)。如果您的项目很小/简单/独立且不保密,您可以与我分享以尝试重现(电子邮件jcouv@microsoft.com)。 - Julien Couvreur
@JulienCouvreur 我尝试安装了VS 2017的Project System Tools扩展,并且可以看到binlog结果,但似乎没有帮助,错误路径是Target CoreCompile -> Target Csc。完全新的ASP.NET MVC/WebApi项目可以使用C# 7.3构建良好,这太荒谬了。我不确定我遇到问题的项目有什么问题(我尝试比较了这两个项目以查看差异,但除了已安装的软件包列表外很难)。我的项目只是一个演示项目(类似于游乐场),这里没有任何机密信息...。 - Hopeless
显示剩余5条评论
7个回答

43

我通过以下步骤解决了这个问题,而不需要升级任何NuGet包:

  1. 关闭所有正在运行的Visual Studio实例

  2. 打开“Visual Studio Installer”

  3. 在您使用的Visual Studio版本上单击“修改”

    i. 在我的情况下,我使用的是VS2019 Professional 16.11.0

  4. 在对话框顶部选择“各部分组件”

  5. 在搜索栏中输入“Roslyn”

  6. 勾选两个选项, 应该长这样

    i. 如果图片消失,选项为“.NET Compiler Platform SDK”和“C# and Visual Basic Roslyn Compilers”

    ii. 在我的情况下,第二个选项已经被勾选

  7. 通过单击对话框右下角的“修改”确认更改

重新打开项目后,我能够成功编译。


4
2022版本:清理解决方案,关闭Visual Studio,重新打开,重建解决方案。 - Junior Mayhé

21

尝试升级以下NuGet包(已安装的任何一个)以解决问题:

-Microsoft.CodeDom.Providers.DotNetCompilerPlatform

-Microsoft.Net.Compilers


这个在我本地能运行,但是当我提交更改到构建服务器时由于与GetPathsOfAllDirectoriesAbove()相关的原因导致构建失败。我的构建服务器一开始没有报告任何问题,所以在深入研究之前,我找到了这个解决方案:https://dev59.com/ilUL5IYBdhLWcg3wf4F0#64542445。我只需要更新VS 2019,本地的问题就解决了。不需要进行任何更改。 - dev'd

12

对我们来说,简单的清理和重建解决了问题,而不需要更改任何其他设置或配置。


在VS 2022中,它对我来说运行良好,使用的是.NET Framework 4.7.2。 - undefined

3

更新 Microsoft.Net.Compilers nuget 包。


1
请解释一下您的帖子在 https://dev59.com/gVIG5IYBdhLWcg3wzEzT#65643330 的答案之上提供了哪些额外的见解,或者请删除此内容。 - Yunnosch

1

在VS中创建的所有项目,在“生成”选项卡下都有一个名为“平台目标”的属性,它有一些专用值,如x64、any和x86。当您为特定解决方案打开VS实例时,默认的顶部菜单栏是“任何CPU”,这会导致冲突。请确保您在所有地方都有共同的配置,这将给您一个良好的构建。


0

如果有人遇到类似的错误:

项目-->属性-->生成-->高级-->然后像这样更改语言版本: [enter image description here


0

我曾经遇到过类似的问题。安装 .Net Framework 4.8 targeting package 可以解决这个问题。

  1. 打开 VS 安装程序
  2. 点击修改
  3. 在单独的组件中,勾选 .Net Framework 4.8 targeting package
  4. 安装
  5. 打开你的解决方案并构建它

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