Feature 'using declarations' is not available in C# 7.3. Please use language version 8.0 or greater - Error on one machine but works on another

When using Visual Studio Enterprise 16.3.7 on two separate machines, one builds fine and the other machine throws the error:

Feature 'using declarations' is not available in C# 7.3. Please use language version 8.0 or greater.

enter image description here

enter image description here

This can easily be solved on the non-working machine by setting LangVersion in .csproj as suggested here https://stackoverflow.com/a/48085575/3850405 or let Visual Studio automatically fix it like the screenshot above.

<LangVersion>8.0</LangVersion>

What I can't understand is why one machine builds fine without this line in .csproj and the other machine needs it?

154556 次浏览

我下载了。Net Core 3.0和3.1也有同样的问题。对我来说,这个修复程序似乎下载了 Visual Studio 2019的最新更新(版本16.4.2)。

这也重新启动了我的电脑,错误消失了。

我收到了同样的错误,但是我只是忘记了包含

<LangVersion>8.0</LangVersion>

属性在解决方案中的. csproj 文件。 下面是我当前的 c # 8设置:

  <PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<LangVersion>8.0</LangVersion>
<Nullable>enable</Nullable>
<NullableContextOptions>enable</NullableContextOptions>
</PropertyGroup>

我发现以下文档在从核心2.2迁移到3. x 时最有帮助:

MSDN 2.2-> 3.0

MSDN 3.0-> 3.1

我不得不把 Visual Studio 的版本从16.3.X 升级到16.4.2。这解决了问题,我不需要添加任何 LangVersion。

来源: https://github.com/aspnet/AspNetCore.Docs/issues/16047

这可能是因为编译器默认情况下对不同的目标框架使用不同的 C # 语言版本。

若要覆盖默认的 C # 语言,请添加到项目文件(正如问题中所建议的那样) :

<PropertyGroup>
<LangVersion>8.0</LangVersion>
</PropertyGroup>

或:

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

Note: It is not recommended to use a language version newer than the default.
C # 语言版本控制-微软文档(截至2022年3月11日) :

这个默认选择还确保您不会使用需要类型或运行时行为的语言,而这些在目标框架中是不可用的。选择比默认版本更新的语言版本会导致难以诊断编译时和运行时错误。


有关不同目标框架的默认 C # 语言版本以及如何手动选择 C # 语言版本,请参见 C # 语言版本控制-微软文档

有关此主题的更多信息,请参见堆栈溢出答案 Does C# 8 support the .NET Framework?


下面是 C # 语言版本控制-微软文档文章(截至2022年3月11日)的一部分,解释了不同目标框架的默认语言版本:

C # 语言版本控制

最新的 C # 编译器根据项目的目标框架确定默认语言版本。VisualStudio 不提供用于更改值的 UI,但是您可以通过编辑 csproj 文件来更改它。默认值的选择确保您使用与目标框架兼容的最新语言版本。您可以通过访问与项目目标兼容的最新语言特性来获益。这个默认选择还确保您不会使用需要类型或运行时行为的语言,而这些在目标框架中是不可用的。选择比默认版本更新的语言版本会导致难以诊断编译时和运行时错误。

C # 10只支持。NET 6和更新的版本。C # 9只支持。NET 5和更新的版本。C # 8.0只支持。NET Core 3.x 和更新的版本。

...

违约

编译器根据以下规则确定默认值:

╔══════════════════╦═════════╦═════════════════════════════╗
║ Target framework ║ version ║ C# language version default ║
╠══════════════════╬═════════╬═════════════════════════════╣
║ .NET             ║ 6.x     ║ C# 10                       ║
║ .NET             ║ 5.x     ║ C# 9.0                      ║
║ .NET Core        ║ 3.x     ║ C# 8.0                      ║
║ .NET Core        ║ 2.x     ║ C# 7.3                      ║
║ .NET Standard    ║ 2.1     ║ C# 8.0                      ║
║ .NET Standard    ║ 2.0     ║ C# 7.3                      ║
║ .NET Standard    ║ 1.x     ║ C# 7.3                      ║
║ .NET Framework   ║ all     ║ C# 7.3                      ║
╚══════════════════╩═════════╩═════════════════════════════╝

我做了以下几件事,它解决了我的问题:

  1. create a file named "Directory.Build.props" in the solution directory and writing this code:

    <Project>
    <PropertyGroup>
    <LangVersion>latest</LangVersion>
    </PropertyGroup>
    </Project>
    
  2. 删除.vs 文件夹(它隐藏在解决方案目录中)

  3. 重新启动 VisualStudio

二零二一年

原因: 你可能瞄准了使用 C # 7.3.NET 标准2.0

修正: 在项目的 物业,下单击 申请面板并选择 .NET 标准2.1作为 目标框架

在上述更改之后,VisualStudio2019将自行修复该问题,不需要 LangVersion设置。

见: C # 语言版本控制

enter image description here

您必须在 * . csproj 文件中的 PropertyGroup 中忘记这个标记。

<LangVersion>8.0</LangVersion>

如果您安装 ReSharper,它将自动为您修改 csproj 文件;)

检查两台机器上的配置是否有效(Debug/Release,x64/AnyCPU)。这也可能导致此错误。

In my case, I had to remove to remove the <ImplicitUsings>enable</ImplicitUsings> line from my .csproj file.