如何将所有 C# 8 可空引用警告视为错误?
How to treat ALL C# 8 nullable reference warnings as errors?
使用 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>
如果我将其设置为将所有警告都视为错误:
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<WarningsAsErrors />
它将其他警告报告为错误。例如,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 并且不起作用。
问题是 .editorconfig
文件覆盖了 Visual Studio 设置,将所有警告都视为错误,其中包含许多行,例如:
dotnet_diagnostic.CS8602.severity = warning
这强制CS8602成为警告。
这是怎么发生的: 在之前将所有可为空的引用警告转换为错误的尝试中,我在编辑器配置中将其中许多设置为错误。在那里,我发现有大量不同的警告编号,而且我的代码库还没有准备好让它们在整个解决方案中出现错误。所以我在编辑器配置中将它们设置为 "warning" 因为我不想丢失我找到的警告列表。然后后来,忘记了所有这一切,我决定在逐个项目的基础上打开将警告视为错误。
我建议使用 this 解决方案。
它提到了所有 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>
更新:
我们现在有这个列表:
<WarningsAsErrors>CS8600;CS8601;CS8602;CS8603;CS8613;CS8625;CS8629;CS8614;CS8619;CS8633</WarningsAsErrors>
2021 年 4 月更新:
我们现在有这个列表:
<WarningsAsErrors>CS8600;CS8601;CS8602;CS8603;CS8604;CS8613;CS8614;CS8619;CS8620;CS8622;CS8625;CS8629;CS8633,CS8767</WarningsAsErrors>
现在可以将所有与可空相关的警告视为错误,而无需显式指定它们。为此,您必须在 *.csproj 文件 [source].
中设置 <WarningsAsErrors>Nullable</WarningsAsErrors>
完整示例:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<Nullable>enable</Nullable>
<WarningsAsErrors>Nullable</WarningsAsErrors>
</PropertyGroup>
</Project>
使用 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>
如果我将其设置为将所有警告都视为错误:
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<WarningsAsErrors />
它将其他警告报告为错误。例如,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 并且不起作用。
问题是 .editorconfig
文件覆盖了 Visual Studio 设置,将所有警告都视为错误,其中包含许多行,例如:
dotnet_diagnostic.CS8602.severity = warning
这强制CS8602成为警告。
这是怎么发生的: 在之前将所有可为空的引用警告转换为错误的尝试中,我在编辑器配置中将其中许多设置为错误。在那里,我发现有大量不同的警告编号,而且我的代码库还没有准备好让它们在整个解决方案中出现错误。所以我在编辑器配置中将它们设置为 "warning" 因为我不想丢失我找到的警告列表。然后后来,忘记了所有这一切,我决定在逐个项目的基础上打开将警告视为错误。
我建议使用 this 解决方案。 它提到了所有 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>
更新:
我们现在有这个列表:
<WarningsAsErrors>CS8600;CS8601;CS8602;CS8603;CS8613;CS8625;CS8629;CS8614;CS8619;CS8633</WarningsAsErrors>
2021 年 4 月更新:
我们现在有这个列表:
<WarningsAsErrors>CS8600;CS8601;CS8602;CS8603;CS8604;CS8613;CS8614;CS8619;CS8620;CS8622;CS8625;CS8629;CS8633,CS8767</WarningsAsErrors>
现在可以将所有与可空相关的警告视为错误,而无需显式指定它们。为此,您必须在 *.csproj 文件 [source].
中设置<WarningsAsErrors>Nullable</WarningsAsErrors>
完整示例:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<Nullable>enable</Nullable>
<WarningsAsErrors>Nullable</WarningsAsErrors>
</PropertyGroup>
</Project>