我有一堂像这样的课:
[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:通过将成员名称“_Default.ParaQueFalleCalidadCodigoDosIo_ReglaCA1709()”中的“Io”的大小写更改为“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 - 通过将成员名称“_Default.ParaQueFalleCalidadCodigoUnoIo_ReglaCA1709()”中的“Io”的大小写更改为“IO”来更正它。
CA1709 - 通过将成员名称“_Default.ParaQueFalleCalidadCodigoDosIo_ReglaCA1709()”中的“Io”的大小写更改为“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 违规是完全可以的。