C# 编译器抛出语言版本 (LangVersion) 引用错误“无效的‘可空’值:C# 7.3 的‘启用’”

问题描述 投票:0回答:7

我有几个 .NET Standard 项目的解决方案,我想启用 c# 8 和 nullable,如下所示:

<PropertyGroup>
    <TargetFramework>netstandard2.1</TargetFramework>
    <LangVersion>8.0</LangVersion>
    <Nullable>enable</Nullable>
  </PropertyGroup>

注意:这些设置可在您的 .csproj 文件中找到。

问题是有些项目编译正常,有些则有错误:

无效的“可空”值:C# 7.3 的“启用”。请使用语言 版本“预览”或更高版本

我有 Visual Studio 16.2 Preview 2 和 .NET Core 3 Preview 6。这是预览版中的错误还是我做错了什么?

c# nullable c#-8.0 nullable-reference-types
7个回答
49
投票

就我而言,当我将目标框架从 .NET Standard 2.1 更改为 .NET Standard 2.0 时,我在 Visual Studio 2022 中遇到了这个问题。我通过删除 .csproj 文件中的

<Nullable>enable</Nullable>
并重新启动 Visual Studio 解决了我的问题。 原始.csproj文件:

<PropertyGroup> <TargetFramework>netstandard2.1</TargetFramework> <Nullable>enable</Nullable> </PropertyGroup>

新的.csproj文件:

<PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> </PropertyGroup>



18
投票
<LangVersion>preview</LangVersion>

    


4
投票

net6.0;net48

net48;net6.0


3
投票

这里有一篇很棒的文章

...下面的导入代码片段全部归功于作者:

<!-- Set the LangVersion = 8 --> <PropertyGroup> <TargetFrameworks>netstandard2.0;netstandard2.1</TargetFrameworks> <LangVersion>8.0</LangVersion> </PropertyGroup> <!-- Only enable nullable feature for the supported frameworks --> <PropertyGroup Condition=" '$(TargetFramework)' != 'netstandard2.0' "> <Nullable>enable</Nullable> </PropertyGroup>

然后在不支持的框架中隐藏警告消息:
<PropertyGroup Condition=" $(Nullable) != 'enable' ">
  <NoWarn>$(NoWarn);CS8632</NoWarn>
</PropertyGroup>

当我必须将 C# 语言的编译时支持版本从 11.0 降级到 7.0 时,我遇到了同样的问题。我解决了 .net 7.0 项目的问题,并能够通过简单地将“启用”替换为“禁用”在 VS2022 中编译它。

3
投票
查看最终的项目配置:

<PropertyGroup> <TargetFramework>net7.0</TargetFramework> <ImplicitUsings>disable</ImplicitUsings> <Nullable>disable</Nullable> <LangVersion>7.0</LangVersion> </PropertyGroup>

为了解决这个问题,

1
投票

在 Visual Studio 中,右键单击您的项目文件,转到“属性”

    构建 --> 事件 --> 高级 --> 取消选中确定性
  1. 现在构建项目。

我正在使用 Visual studio 2022 版本测试 AvaloniaUI,它一定已经改变了它。 内部文件“Directory.Build.props” 该属性是否可以为 null 启用

0
投票
刚刚删除文件就可以了!

© www.soinside.com 2019 - 2024. All rights reserved.