netstandard2.0 和 net451 的 c#8 中的 AllowNull 属性引发编译错误

AllowNull Attribute in c#8 for netstandard2.0 and net451 raise compilation error

环境:对比 2019 v16.3.1

在 c# netstandard2.0 和 net451 项目中,我使用带有属性的 c# 8 可空引用。

在 csproj 中启用 c#8:

    <LangVersion>8.0</LangVersion>
    <Nullable>enable</Nullable>

在myclass.cs中,我使用AllowNullAttribute:

     class My class {
       [AllowNull]
     public T MyValue {get;set;}
     }

构建项目时出现编译错误:

CS0246 The type or namespace name 'AllowNullAttribute' could not be found (are you missing a using directive or an assembly reference?) ConsoleApp1 (netstandard2.0)

文档Attributes extend type annotations包括这些类型

这段代码有什么问题?

C# 8(因此,通过扩展,AllowNull)似乎在 netstandard 2.0 中没有得到完全支持。

例如,如果您转到 documentation 的 AllowNull 和 select .NET Standard 2.0 作为版本,您将收到以下消息:

The requested page is not available for .NET Standard 2.0. You have been redirected to the newest product version this page is available for.

另见 this Github issue。即,

Officially, C# 8.0 is only supported on runtimes that adhere to the .NET Standard 2.1. That does not (and will not) include .NET Framework 4.x.