JetBrains Rider 2025.3 Help

配置编译器警告

JetBrains Rider 包含报告 最重要的编译器警告的代码检查,以及相应的 快速修复。 为了确保 JetBrains Rider 的代码检查结果与编译器输出以及其他工具和分析器一致,编译器警告的严重性等级不能像处理 JetBrains Rider 专有检查那样 从编辑器通过 JetBrains Rider 设置 进行配置。

相反,您可以通过其他方式抑制编译器警告,具体如下:

通过以下方式配置

兼容性

粒度

用它来

.editorconfig

所有代码分析规则,但不包括所有编译器警告

文件/类型/全局

确保与 Roslyn 分析器兼容;更改规则的严重性等级

#pragma 指令

所有编译器警告和代码分析规则

代码块/文件

在本地抑制特定警告

.csproj 中的属性

所有编译器警告和代码分析规则

项目作用域

在构建级别抑制警告或将警告升级为错误

[SuppressMessage] 特性

所有编译器警告和代码分析规则

类型/成员

在本地作用域中抑制特定警告

GlobalSuppressions.cs

所有编译器警告和代码分析规则

整个程序集

在整个项目中抑制不可编辑或生成代码中的警告

使用 .editorconfig(推荐用于代码样式和现代分析器)

.editorconfig 文件是一种便捷方式,可用于配置代码样式和诊断信息。 它允许您以一致且适用于整个项目的方式指定某些警告的严重性等级。

您可以使用如下格式的 EditorConfig 键为所有受支持的警告进行设置:

dotnet_diagnostic.<ID>.severity = none | silent | suggestion | warning | error

例如:

dotnet_diagnostic.CS8618.severity = none

此方法适用于从 C# 8.0 开始的编译器警告以及 Roslyn 分析规则,包括编译器自身生成的警告。例如: 例如:

  • 与可空引用相关的警告(CS8xxx)。

  • 平台兼容性警告(CS9xxx)。

  • 某些文档或代码样式诊断(例如 CS1591)。

在代码中使用 #pragma 指令

您可以在代码中直接使用 #pragma 指令来抑制特定警告。 这对于一次性抑制或将警告限制在特定代码块中非常有用。

要抑制已高亮显示的编译器警告,请按 Alt+Enter 并选择相应项。

JetBrains Rider:使用 '#pragma' 禁用编译器警告

使用 #pragma 进行的抑制将如下所示:

catch (Exception e) { Console.WriteLine("Caught exception {0}", e); } #pragma warning disable CS1058 // A previous catch clause already catches all exceptions catch #pragma warning restore CS1058 // A previous catch clause already catches all exceptions { Console.WriteLine("Exception fallback"); }

此方法适用于所有编译器警告(CSxxxx ),即使是那些无法通过 .editorconfig 配置的警告。

在项目文件(.csproj)中配置警告

项目文件允许您在整个项目范围内配置警告行为。示例如下: 示例包括:

抑制特定警告

<PropertyGroup> <NoWarn>CS8618;CS1591</NoWarn> </PropertyGroup>

将所有警告视为错误

<PropertyGroup> <TreatWarningsAsErrors>true</TreatWarningsAsErrors> </PropertyGroup>

将特定警告视作错误或非错误

<PropertyGroup> <WarningsAsErrors>CS8618</WarningsAsErrors> <WarningsNotAsErrors>CS1591</WarningsNotAsErrors> </PropertyGroup>

.csproj 中的配置适用于所有 CS 警告,并在构建输出行为方面会覆盖 .editorconfig 设置。

使用 [SuppressMessage] 特性

[SuppressMessage] 用于在特定类型或成员内抑制特定编译器警告和代码分析规则。 当您需要清晰、有作用域且可文档化的抑制时,它可以替代 #pragma 使用。 例如:

[SuppressMessage("Compiler", "CS1058", Justification = "Intentional for testing")] static void Test() { try { } catch (Exception e) { Console.WriteLine("Caught exception {0}", e); } catch { Console.WriteLine("Exception fallback"); } }

使用全局抑制文件(GlobalSuppressions.cs)

您可以通过 全局抑制文件 为整个项目中的编译器警告或 Roslyn 代码分析规则设置抑制。 使用特性指定要抑制的警告。 例如:

// GlobalSuppressions.cs [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Naming", "CA1707:IdentifiersShouldNotContainUnderscores", Justification = "Test methods require underscores for readability." Scope = "namespaceanddescendants", Target = "~N:Company.Product.Tests")]
最后修改日期: 2025年 12月 5日