VS2010、代码分析和SuppressMessage中的FxCop行为
本文关键字:SuppressMessage 中的 FxCop 行为 代码 VS2010 | 更新日期: 2023-09-27 17:57:34
我有一个类似的类:
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Io")]
public void ParaQueFalleCalidadCodigoUnoIo_ReglaCA1709()
{
}
public void ParaQueFalleCalidadCodigoDosIo_ReglaCA1709()
{
}
我使用自定义规则集文件CustomRules.Ruleset
<RuleSet Name="RulesNet" ToolsVersion="10.0">
<RuleHintPaths>
<Path>C:'Fxcop10.0'Rules</Path>
</RuleHintPaths>
<Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" RuleNamespace="Microsoft.Rules.Managed">
<Rule Id="CA1709" Action="Warning" />
</Rules>
</RuleSet>
当我运行VS2010内置代码分析工具时,我会收到以下警告:
CA1709:Microsoft.Naming:更正成员名称中'Io'的大小写通过更改"_Default.ParaQueFalleCalidadCodigoDosIo_ReglaCA1709()"到"IO"。
现在,我可以在FxCopCmd.exe中使用相同的规则集文件CustomRules.ruleset:
FxCopCmd.exe/gac/d:"C:''CompanyFramework''4.0.0.0"/f:"d:''TFS''Tests''WebApplication1''bin''WebApplication1.dll"/o:"resultsFxCop.xml"/ruleset:"=CustomRules.ruleset"/v
我得到2个错误(FixCategory Breaking和Level Error)
CA1709-更正成员名称中"Io"的大小写通过更改"_Default.ParaQueFalleCalidadCodigoUnoIo_ReglaCA1709()"到"IO"。
CA1709-更正成员名称中"Io"的大小写通过更改"_Default.ParaQueFalleCalidadCodigoDosIo_ReglaCA1709()"到"IO"。
<Message Id="Io" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Status="Active" Created="2013-02-05 10:24:01Z" FixCategory="Breaking">
<Issue Name="Member" Certainty="85" Level="Error" Path="D:'TFS'Tests'WebApplication1" File="Default.aspx.cs" Line="21">Correct the casing of 'Io' in member name '_Default.ParaQueFalleCalidadCodigoUnoIo_ReglaCA1709()' by changing it to 'IO'.</Issue>
</Message>
<Message Id="Io" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Status="Active" Created="2013-02-05 10:24:01Z" FixCategory="Breaking">
<Issue Name="Member" Certainty="85" Level="Error" Path="D:'TFS'Tests'WebApplication1" File="Default.aspx.cs" Line="26">Correct the casing of 'Io' in member name '_Default.ParaQueFalleCalidadCodigoDosIo_ReglaCA1709()' by changing it to 'IO'.</Issue>
</Message>
在resultsFxcop.xml中,我看到了CA1709:IdentifiersShouldBeCasedCorrectly规则:
<Rule TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709">
<Name>Identifiers should be cased correctly</Name>
<Description>Type, namespace, and... OMITED.</Description>
<Resolution Name="Member">Correct the casing of '{0}' in member name {1} by changing it to '{2}'.</Resolution>
<Owner />
<Url>http://msdn.microsoft.com/library/ms182240(VS.100).aspx</Url>
<Email>[none]</Email>
<MessageLevel Certainty="85">Error</MessageLevel>
<File Name="namingrules.dll" Version="10.0.0.0" />
</Rule>
CA1709规则的消息级别:
<MessageLevel Certainty="85">Error</MessageLevel>
两个问题:
- 我收到错误,但CA1709规则操作为警告
- 使用FxCopcmd.exe忽略SuppressMessage
现在,我修改CustomRules.ruleset并再次执行FxCopcmd.exe
<Rule Id="CA1709" Action="None" />
我得到没有错误。
我修改CustomRules.ruleset并再次执行FxCopcmd.exe
<Rule Id="CA1709" Action="Ignore" />
我得到了相同的2个错误。
我需要使用FxCopCmd.exe和自定义规则集。
- SuppressMessage是否适用于FxCopcmd.exe
- 如果使用Fxcopcmd.exe"操作"为"警告",为什么会出现错误
- CA1709规则的MessageLevel错误意味着什么?优先级高于规则操作"警告"
有什么建议吗?
更新
http://social.msdn.microsoft.com/Forums/en/vstscode/thread/3f8931da-9a4d-47a6-b331-8b6b07aea8d6
http://social.msdn.microsoft.com/forums/en-US/vstscode/thread/3cb6c50c-7095-4551-a4e3-a3cbc7cb85be
对于默认的FxCop规则,没有简单的方法可以修改消息级别
MessageLevel是消息的重要性,例如,如果您有数千条消息,那么最好先解决关键(感叹号)错误。
确定性是规则编写器为每个规则分配的数字,是消息导致代码更改的可能性。这个数字是根据领域专家的反馈建立的;客户以及规则中使用的启发式算法能够避免误报的程度。
修复类别:这表明如果代码以前已经发货,那么对违规的修复是否会是二进制破坏性的更改。例如,你有一个图书馆,里面有一个拼写错误的地方,你已经把它寄给了客户。现在,您开始在上面运行FxCop,并看到拼写错误。FxCop会告诉你这是一个突破性的变化。如果您修复了拼写错误并将库的新版本发送给客户,那么客户在不更改和重新编译代码的情况下就无法使用库。因此,您可能希望忽略此API上的FxCop违规。另一方面,如果你从未发货,那么修复FxCop违规是完全可以的。
SuppressMessage是否适用于FxCopcmd.exe?
是的。您需要使用定义的CODE_ANALYSIS
编译符号进行编译,以便将SuppressMessage属性包含在程序集中。一旦它们进入其中,FxCop引擎就会识别它们,而不管用于运行分析的机制是什么。
如果使用Fxcopcmd.exe"操作"为"警告",为什么会出现错误?
写入FxCop生成的报告的问题级别始终使用规则作者指定的级别。从Visual Studio中运行时,Visual Studio集成插件会使用规则集中指定的级别覆盖此级别。运行fxcopcmd.exe时,将规则配置为警告与错误之间的唯一区别是,检测到错误级别的规则冲突将导致fxcopcmdexe返回非零退出代码,从而允许您中断自动生成。
如果您希望fxcopcmd.exe在生成其报告时使用您的级别覆盖,您可以考虑在http://visualstudio.uservoice.com/.