.NET Framework 项目中的可空引用类型不能与 IntelliSense 一起使用

Posted

技术标签:

【中文标题】.NET Framework 项目中的可空引用类型不能与 IntelliSense 一起使用【英文标题】:Nullable reference types in .NET Framework projects not working with IntelliSense 【发布时间】:2020-01-28 23:16:54 【问题描述】:

当我创建一个新的控制台应用程序 (.NET Framework 4.8) 并尝试使用 C# 8 的可为空引用类型时,我看到以下内容:

而且,我在构建输出中收到此警告:

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 控制台应用程序,一切都会按预期工作。

【问题讨论】:

遗憾的是,C#8 功能仅适用于 Net Core 3。 这应该可以工作:one,two。可能不明显的步骤是您必须在编辑项目文件后关闭并重新打开解决方案或重新启动 VS,以便 IS 解析器重新审视它。 @Rudey 抱歉,看来我弄错了。我尝试使用 C# 8,但直到 Core 3 才对我有用。 @Rudey 这是一个 Visual Studio 问题 - Intellisense 是一个 VS 功能。你用的是哪个 VS 版本? 这是哪个版本的 Visual Studio?更新了吗? 【参考方案1】:

如何配置 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。

行为是Intellisense 没有在.net framework 4.8 项目中为我们显示正确 消息C#8.0。这是一个只能通过修复程序处理的问题。所以没有有效的方法来解决这个 Intellisense(VS 功能)的问题,除非在我们报告这个问题之后修复。我们可以Suppress or Configure CS8632's severity,但这是一个非常糟糕的主意..

【讨论】:

很遗憾微软似乎对此无所作为。 刚刚看到 DC 的更新,很抱歉给您带来的不便,C#8.0 在 .net 框架中不完全支持。您可以从this link 获得更多详细信息:)【参考方案2】:

尝试将 vs2019 更新到 16.3.2,对我有用

【讨论】:

不适用于 .NET Framework 项目,这就是这个问题的意义所在。 The release notes for 16.3.2 也完全没有提及可空引用类型。 @Rudey 我正在使用 .NET Framework 4.7.2 项目运行 VS Community 16.3.9。它可以很好地识别可为空的注释。 您使用的是旧式 .csproj 还是新 (SDK) .csproj 格式?

以上是关于.NET Framework 项目中的可空引用类型不能与 IntelliSense 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

未从 FirstOrDefault 公开的可空引用类型信息

如何将 C# 8.0 可空引用类型与 Entity Framework Core 模型一起使用?

c# 中的可空类型是啥?

具有泛型返回类型的可空引用类型

使用 C# 8 的可空引用类型

C# 8.0 可空(Nullable)给ASP.NET Core带来的坑