How to suppress code analysis warnings
This article covers the various ways you can suppress warnings from code analysis when you build your .NET app. You can suppress code quality rules, code style rules, and third-party analyzer rules using the information provided here.
Tip
If you're using Visual Studio as your development environment, the light bulb menu provides options that generate the code to suppress warnings for you. For more information, see Suppress violations.
Disable the rule
You can disable a rule that's causing a warning by setting its severity to none
in an EditorConfig or AnalyzerConfig configuration file. This action disables the rule for your entire file or project, depending on the scope of the configuration file that you use.
[*.{cs,vb}]
dotnet_diagnostic.<rule-ID>.severity = none
For more information about rule severities, see Configure rule severity.
Use a preprocessor directive
Use a #pragma warning (C#) or Disable (Visual Basic) directive to suppress the warning for only a specific line of code.
try { ... }
catch (Exception e)
{
#pragma warning disable CA2200 // Rethrow to preserve stack details
throw e;
#pragma warning restore CA2200 // Rethrow to preserve stack details
}
Try
...
Catch e As Exception
#Disable Warning CA2200 ' Rethrow to preserve stack details
Throw e
#Enable Warning CA2200 ' Rethrow to preserve stack details
End Try
Use the SuppressMessageAttribute
You can use a SuppressMessageAttribute to suppress a warning either in the source file or in a global suppressions file for the project (GlobalSuppressions.cs or GlobalSuppressions.vb). This attribute provides a way to suppress a warning in only certain parts of your project or file.
The two required, positional parameters for the SuppressMessageAttribute attribute are the category of the rule and the rule ID. The following code snippet passes "Usage"
and "CA2200:Rethrow to preserve stack details"
for these parameters.
[System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "CA2200:Rethrow to preserve stack details", Justification = "Not production code.")]
private static void IgnorableCharacters()
{
try
{
...
}
catch (Exception e)
{
throw e;
}
}
If you add the attribute to the global suppressions file, you scope the suppression to the desired level, for example "member"
. You specify the API where the warning should be suppressed using the Target property.
[assembly: SuppressMessage("Usage", "CA2200:Rethrow to preserve stack details", Justification = "Not production code.", Scope = "member", Target = "~M:MyApp.Program.IgnorableCharacters")]
Use the documentation ID for the API you want to reference in the Target
attribute. For information about documentation IDs, see Documentation ID format.
To suppress warnings for compiler-generated code that doesn't map to explicitly provided user source, you must put the suppression attribute in a global suppressions file. For example, the following code suppresses a violation against a compiler-emitted constructor:
[module: SuppressMessage("Design", "CA1055:AbstractTypesDoNotHavePublicConstructors", Scope="member", Target="MyTools.Type..ctor()")]
See also
Feedback
https://aka.ms/ContentUserFeedback.
Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see:Submit and view feedback for