首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FxCop在VS2010、代码分析和SuppressMessage中的行为

FxCop在VS2010、代码分析和SuppressMessage中的行为
EN

Stack Overflow用户
提问于 2013-02-05 09:13:17
回答 1查看 2.2K关注 0票数 4

我有一个这样的班:

代码语言:javascript
复制
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Io")]
    public void ParaQueFalleCalidadCodigoUnoIo_ReglaCA1709()
    {

    }

    public void ParaQueFalleCalidadCodigoDosIo_ReglaCA1709()
    {

    }

我使用自定义的Ruleset文件CustomRules.ruleset

代码语言:javascript
复制
<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时,我会得到以下警告:

'_Default.ParaQueFalleCalidadCodigoDosIo_ReglaCA1709()‘:CA1709 :通过将“IO”更改为“IO”,更正成员名“IO”中的“IO”大小写。

现在,我可以在CustomRules.ruleset中使用相同的规则集文件FxCopCmd.exe。

/f:"D:\TFS\Tests\WebApplication1\bin\WebApplication1.dll“/o:"resultsFxCop.xml”/ruleset:"=CustomRules.ruleset“/v

我得到了2错误 (FixCategory中断,和级别错误)

'_Default.ParaQueFalleCalidadCodigoUnoIo_ReglaCA1709()‘-修改成员名CA1709中的“IO”大小写,将其更改为“IO”。 '_Default.ParaQueFalleCalidadCodigoDosIo_ReglaCA1709()‘-修改成员名CA1709中的“IO”大小写,将其更改为“IO”。

代码语言:javascript
复制
  <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规则:

代码语言:javascript
复制
 <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>

MessageLevel for CA1709规则:

<MessageLevel Certainty="85">Error</MessageLevel>

两个问题:

  • 我收到错误,但CA1709规则操作是警告
  • 使用SuppressMessage忽略FxCopcmd.exe

现在,我修改CustomRules.ruleset并再次执行FxCopcmd.exe

代码语言:javascript
复制
<Rule Id="CA1709" Action="None" />

我得到了没有错误,

我修改CustomRules.ruleset并再次执行FxCopcmd.exe

代码语言:javascript
复制
<Rule Id="CA1709" Action="Ignore" />

我得到了同样的2错误

我需要使用FxCopCmd.exe和自定义规则集。

  • SuppressMessage为FxCopcmd.exe工作吗?
  • 如果Action是在使用Fxcopcmd.exe发出警告,为什么我会得到错误?
  • MessageLevel规则的CA1709错误意味着什么?比规则行动“警告”更重要?

有什么建议吗?

更新

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是消息的重要性,例如,如果您有数千条消息,那么最好首先着手处理关键错误(感叹号)。

确定性是规则编写者分配给每个规则的数字,是消息导致代码更改的可能性。这个数字是基于来自领域专家和客户的反馈,以及规则中使用的启发式如何能够避免误报而建立起来的。

Fix类别:这表明如果代码之前已经提供了代码,那么针对违规的修复是否是二进制中断更改。例如,你有一个库,里面有一个拼写错误的库,你已经把它寄给了客户。现在开始在上面运行FxCop,并看到拼写错误。FxCop会告诉你这是一个巨大的变化。如果您修复了错误拼写,并向客户提供了新版本的库,他们就不能在不更改和重新编译其代码的情况下使用该库。因此,您可能想忽略这个API上的FxCop违规。另一方面,如果您从未发布过,那么修复FxCop违规是完全可以的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-05 13:46:30

SuppressMessage为FxCopcmd.exe工作吗?

是。您需要使用定义的CODE_ANALYSIS编译符号进行编译,以便将SuppressMessage属性包含到程序集中。一旦它们在其中,FxCop引擎将识别它们,而不管用于运行分析的机制是什么。

如果Action是在使用Fxcopcmd.exe发出警告,我为什么会收到错误?

写入FxCop生成的报告的问题级别总是使用规则作者指定的级别。在Visual中运行时,Visual集成插件用规则集中指定的插件覆盖此级别。当您运行fxcopcmd.exe时,将规则配置为警告与错误之间的唯一区别是,检测错误级别的规则冲突将导致fxcopcmd.exe返回一个非零的退出代码,从而允许您破坏自动生成。

如果您希望fxcopcmd.exe在生成其报告时使用您的级别重写,您可能需要考虑在http://visualstudio.uservoice.com/上提出建议。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14703765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档