如何将所有 C# 8 可空引用警告视为错误?

Jef*_*ger 34 c# c#-8.0 nullable-reference-types

将 Visual Studio 2019 v16.3.2 与 .NET Core 3.0 项目设置为 C# 8 并启用可为空引用类型。

<PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <LangVersion>8.0</LangVersion>
    <Nullable>enable</Nullable>
</PropertyGroup>

Run Code Online (Sandbox Code Playgroud)

如果我将其设置为将所有警告视为错误:

警告作为错误单选按钮被选中

<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<WarningsAsErrors />
Run Code Online (Sandbox Code Playgroud)

它将其他警告报告为错误。例如,CS0168 The variable 'x' is declared but never used被报告为错误。但所有可为空的引用警告仍报告为警告。例如,CS8600 Converting null literal or possible null value to non-nullable type.仍然报告为警告。

如何将所有可为空的引用警告视为错误?

注意:即使将 CS8600 专门设置为错误处理,也不会导致其报告为错误。如果这样做有效,那么将它们全部视为错误仍然无济于事,因为有很多。

编辑:将特定警告设置为错误放入<WarningsAsErrors>CS8600;CS8602;CS8603</WarningsAsErrors>csproj 并且不起作用。

off*_*cer 46

现在可以将所有与可为空相关的警告视为错误,而无需明确指定所有警告。为此,您必须<WarningsAsErrors>nullable</WarningsAsErrors>在 *.csproj 文件[source] 中进行设置

完整示例:

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <Nullable>enable</Nullable>
    <WarningsAsErrors>nullable</WarningsAsErrors>
  </PropertyGroup>
</Project>

Run Code Online (Sandbox Code Playgroud)

  • 问题明确是将所有可为空的警告视为错误。 (2认同)
  • @SerjG 除此之外,我在现有代码库中引入可为空功能的方法是对新的/更改的文件使用“#nullable enable”编译指示。另一种方法可能是全局启用它,但使用“#nullable disable”选择退出您的特殊文件。 (2认同)

Jef*_*ger 7

问题是该.editorconfig文件覆盖了 Visual Studio 设置,以将所有警告视为具有许多行的错误,例如:

dotnet_diagnostic.CS8602.severity = warning
Run Code Online (Sandbox Code Playgroud)

这迫使 CS8602 成为警告。

这是如何发生的:在之前尝试将所有可为空的引用警告转换为错误时,我在编辑器配置中将其中许多设置为错误。在那,我发现有大量不同的警告数字,而且我的代码库还没有准备好让它们在整个解决方案中成为错误。所以我在编辑器配置中将它们设置为“警告”,因为我不想丢失我发现的警告列表。后来,忘记了这一切,我决定在一个项目的基础上打开将警告视为错误。


Ser*_* G. 6

我建议使用解决方案。它提到了所有 3 个错误和恕我直言更好的解决方案

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <LangVersion>8.0</LangVersion>
    <WarningsAsErrors>CS8600;CS8602;CS8603</WarningsAsErrors>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

屏幕


更新:

我们现在有这个清单: <WarningsAsErrors>CS8600;CS8601;CS8602;CS8603;CS8613;CS8625;CS8629;CS8614;CS8619;CS8633</WarningsAsErrors>

2021-04 更新:

我们现在有这个清单: <WarningsAsErrors>CS8600;CS8601;CS8602;CS8603;CS8604;CS8613;CS8614;CS8619;CS8620;CS8622;CS8625;CS8629;CS8633,CS8767</WarningsAsErrors>

  • 关于您的更新:也许`CS8618 C# Non-nullable 属性未初始化。考虑将属性声明为可为空。`也可能与包含相关。 (2认同)