功能“使用声明”在C#7.3中不可用。请使用语言版本8.0或更高版本-一台计算机上出现错误,但在另一台计算机上有效


24

Visual Studio Enterprise 16.3.7在两台单独的计算机上使用时,一个构建良好,另一台计算机抛出错误:

功能“使用声明”在C#7.3中不可用。请使用语言版本8.0或更高版本。

在此处输入图片说明

在此处输入图片说明

通过LangVersion.csproj此处建议的设置https://stackoverflow.com/a/48085575/3850405可以轻松在无工作计算机上解决此问题,或者让Visual Studio像上面的打印屏幕一样自动修复它。

<LangVersion>8.0</LangVersion>

我不明白的是,为什么一台机器在没有这条线的情况下就可以正常运行,.csproj而另一台机器需要它呢?


如果收到这样的错误,则表明它不是 C#8项目,或者您使用的是带有分析错误的Resharper版本
Panagiotis Kanavos

csproj中的TargetFramework和LangVersion是什么?
Panagiotis Kanavos

@PanagiotisKanavos是的,但是项目建立在一台机器上而不是另一台机器上-这是我不理解的。不使用ReSharper。
Ogglas

这可能意味着一台计算机上缺少3.0 SDK。是什么dotnet --list-sdks节目?
Panagiotis Kanavos

@PanagiotisKanavos目标框架.NET Framework 4.6.1LangVersion没有设置。
Ogglas

Answers:


20

我收到了相同的错误,但我只是忘记了包括

<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


2
您可以<LangVersion>latest</LangVersion>代替<LangVersion>8.0</LangVersion>
Eliahu Aaron

我认为第一个链接MSDN 2.2 -> 3.0旨在链接到以下内容:docs.microsoft.com/zh-cn/aspnet/core/migration/22-to-30 我尝试编辑答案以对其进行修改,但是“建议编辑队列已满”,因此将在此处发布。
ahillier88


10

这可能是因为编译器默认将不同的C#语言版本用于不同的目标框架。

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

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

要么:

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

请参见C#语言的版本默认C#语言版本不同的目标框架以及如何手动选择C#语言的版本。

另请参见堆栈溢出答案C#8是否支持.NET Framework?有关此主题的更多信息。


这是C#语言版本控制文章的一部分:

C#语言版本控制

最新的C#编译器根据项目的目标框架或多个框架确定默认的语言版本。这是因为C#语言可能具有依赖于每个.NET实现中不可用的类型或运行时组件的功能。这也可以确保对于构建项目的目标,默认情况下都会获得最高兼容的语言版本。

本文中的规则适用于Visual Studio 2019或.NET Core 3.0 SDK附带的编译器。默认情况下,Visual Studio 2017安装或更早的.NET Core SDK版本中的C#编译器将C#7.0定位为目标。

默认值

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

--------------------------------------------------------
Target framework | version | C# language version default
--------------------------------------------------------
.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
--------------------------------------------------------

覆盖默认

如果必须显式指定C#版本,则可以采用以下几种方法:

  • 手动编辑您的项目文件。
  • 在子目录中设置多个项目的语言版本。
  • 配置-langversion编译器选项。

编辑项目文件

您可以在项目文件中设置语言版本。例如,如果您明确希望访问预览功能,则添加如下元素:

<PropertyGroup>
   <LangVersion>preview</LangVersion>
</PropertyGroup>

该值preview使用编译器支持的最新可用预览C#语言版本。

配置多个项目

要配置多个项目,可以创建包含该元素的Directory.Build.props文件<LangVersion>。您通常在解决方案目录中执行此操作。将以下内容添加到解决方案目录中的Directory.Build.props文件中:

<Project>
 <PropertyGroup>
   <LangVersion>preview</LangVersion>
 </PropertyGroup>
</Project>

现在,包含该文件的目录的每个子目录中的构建都将使用预览C#版本。有关更多信息,请参阅关于定制构建的文章。


8

我下载了.Net Core 3.0和3.1的最新版本,并遇到了相同的问题。对我而言,此修复程序似乎下载了Visual Studio 2019的最新更新(至版本16.4.2)。

这也重新启动了我的计算机,错误消失了。


这不是VS2019版本号,它们看起来像16.xy。使用“帮助”>“关于”。
汉斯·帕桑

4.7.03056是.NET Framework版本,最近的VS版本是16.4.4
Alex
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.