FAQ: Why does FxCop ignore my in-code (SuppressMessageAttribute) suppressions? [David Kean]
FxCop 1.35 brings with it the ability to suppress messages in code via the use of the SuppressMessage attribute. This allows you to do the following:
public class PublicKey
{
private byte[] _Token;
[...]
[SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
public byte[] Token
{
get { return (byte[])_Token.Clone(); }
}
}
In the above example, we've suppressed the Properties Should Not Return Arrays violation for the Token property so that FxCop no longer will raise it. There are clear advantages having a suppression applied directly to the offending member or type:
- Other developers on your team can quickly see that an obvious violation has been suppressed.
- Unlike in-project suppressions, changes to the namespace, type or signature of a member (ie name, return type, etc) do not require the SuppressMessage attribute to be updated.
When first using in-code suppression, it can be confusing as to why FxCop seems to ignore these attributes. The SuppressMessage attribute is what is called a 'conditional' attribute. A conditional attribute is an attribute that is only included in metadata of your assembly if a certain compilation symbol is defined at compile time. The SuppressMessage attribute itself requires the CODE_ANALYSIS symbol to be present and by default, this is not included in non-team system projects.
To define this symbol is easy, simply do the following:
Visual C# 2005:
- In Solution Explorer, right-click your project and choose Properties
- In the Properties window, choose the Build tab
- In the Conditional compilation symbols text box, enter CODE_ANALYSIS
-or-
- csc /define:CODE_ANALYSIS [...]
Visual Basic 2005:
- In Solution Explorer, right-click your project and choose Properties
- In the Properties window, choose the Compile tab and click Advanced Compile Options
- In the Custom constants text box, enter CODE_ANALYSIS
-or-
- vbc /define:CODE_ANALYSIS=True [...]
Visual C++/CLI 2005:
- In Solution Explorer, right-click your project and choose Properties
- In the Properties window, expand the Configuration Properties -> C/C++ -> Preprocessor node
- In the Preprocessor Definitions text box, add ;CODE_ANALYSIS
- Click OK
-or-
- cl /D CODE_ANALYSIS [...]
Once you have recompiled your assembly, FxCop should now respect any in-code suppressions.
As always, if you have any questions or issues with FxCop or Managed Code Analysis (including the SuppressMessageAttribute) head over to the FxCop forum.
Comments
- Anonymous
June 07, 2006
You all know the problem. You run FxCop on your project or solution and it keeps throwing messages at... - Anonymous
August 23, 2006
The comment has been removed