.NET Framework项目中的可空引用类型与IntelliSense不兼容

11
当我创建一个新的控制台应用程序(.NET Framework 4.8)并尝试使用C# 8的可空引用类型时,我会看到以下内容: 只有在 '#nullable' 注释上下文中的代码才应该使用可空引用类型的注释 同时,在我的构建输出中,我会得到以下警告:
warning CS8632: The annotation for nullable reference types should only be used in code within a '#nullable' annotations context.

我还没有启用可空引用类型。我向我的 .csproj 文件添加了以下内容:

<Nullable>enable</Nullable>

这样可以消除构建警告,但 Visual Studio 的 IntelliSense 仍然会抱怨。

我该如何配置 Visual Studio,以便它了解我在我的 .NET Framework 项目中使用可空引用类型,而无需在每个地方都使用 #nullable


相反,如果我创建一个新的 .NET Core 3.0 控制台应用程序,一切都按预期工作。


3
遗憾的是,仅有 .NET Core 3 才能使用 C#8 的功能。 - Karel Kral
1
这应该可以解决问题:one, two。可能不太明显的一步是,在编辑项目文件后,您必须关闭并重新打开解决方案或重新启动VS,以便IS解析器重新查看它。 - Hans Passant
1
@Rudey 抱歉,看起来我弄错了。我尝试了 C# 8,但在 Core 3 之前它对我不起作用。 - Karel Kral
1
@Rudey 这是一个 Visual Studio 问题 - Intellisense 是 VS 的一个功能。你使用的是哪个版本的 VS? - Panagiotis Kanavos
1
@KarelKral可以查看这里,了解如何使其正常工作。 - Zev Spitz
显示剩余5条评论
3个回答

5
如何配置Visual Studio以便它理解我在我的.NET Framework项目中使用了可空引用类型,而不必在每个地方都使用#nullable?
恐怕答案是否定的,因为这可能是关于VS Intellisense的一个问题。
我发现msbuild(VS构建系统)可以在构建过程中很好地识别.net framework4.8项目中的C#8.0。但Intellisense(一个VS功能)不能识别,所以我已经报告了这个问题。如果有人对此问题感兴趣,请参阅Intellisense can't recognize C#8.0 in project that targets .net framework 4.8,了解更多有关该问题的详细信息。
行为是,在使用 C#8.0.net framework 4.8 项目中,Intellisense 不会正确地为我们显示消息。这是一个只能通过修复来处理的问题。因此,除非我们报告了这个问题并进行了修复,否则无法有效解决这个 Intellisense(VS 功能)问题。我们可以 Suppress or Configure CS8632's severity,但这是一个相当糟糕的想法。

2
微软似乎对此毫无作为,这真是遗憾。 - Rudey
刚刚在DC中看到更新,很抱歉C#8.0在.net框架中并没有得到完全支持,给您带来的不便深感抱歉。您可以从此链接获取更多详细信息 :) - LoLance

0

尝试将vs2019更新到16.3.2版本,对我有效


1
不适用于.NET Framework项目,而这正是这个问题所涉及的。16.3.2版本说明中也没有提到可空引用类型。 - Rudey
@Rudey 我正在使用带有.NET Framework 4.7.2项目的VS Community 16.3.9。它可以很好地识别可空注释。 - Zev Spitz
1
你是在使用旧式的.csproj文件还是新的(SDK).csproj格式? - Rudey

0
我建议您将项目文件(.csproj)升级到.netstandard2.0版本。
您需要修改.csproj以针对多个框架版本。
<TargetFrameworks>netstandard2.0;net48</TargetFrameworks>

您可能还需要引用 Microsoft.NETCore.Portable.Compatibility 包。

通过将其添加到您的包引用中:

<PackageReference Include="Microsoft.NETCore.Portable.Compatibility" Version="1.0.1" />

我建议阅读以下答案,以了解您是否真的需要它。 何时需要添加NuGet包Microsoft.NETCore.Portable.Compatibility

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