编程语言
首页 > 编程语言> > c# – VS2010中的FxCop行为,代码分析和SuppressMessage

c# – VS2010中的FxCop行为,代码分析和SuppressMessage

作者:互联网

我有一个像这样的课:

    [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 : Correct the casing of ‘Io’ in member name
‘_Default.ParaQueFalleCalidadCodigoDosIo_ReglaCA1709()’ by changing it
to ‘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 – Correct the casing of ‘Io’ in member name
‘_Default.ParaQueFalleCalidadCodigoUnoIo_ReglaCA1709()’ by changing it
to ‘IO’.

CA1709 – Correct the casing of ‘Io’ in member name
‘_Default.ParaQueFalleCalidadCodigoDosIo_ReglaCA1709()’ by changing it
to ‘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>

MessageLevel for CA1709规则:

06004

两个问题:

>我得到错误,但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?
>如果Action为Warning,使用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是消息的重要性,例如如果您有数千条消息,那么首先开始解决Critical(感叹号)错误可能是个好主意.

确定性是规则编写者为每个规则分配的数字,它是消息导致代码更改的可能性.此数字是根据领域专家的反馈建立的.客户以及规则中使用的启发式方法能够避免误报.

修复类别:这表示如果代码先前已发送,违规的修复是否为二进制更改.例如,您有一个拼写错误的库,您已经将其发送给客户.你现在开始在它上面运行FxCop并看到拼写错误. FxCop会告诉你这是一个重大改变.如果您修复了拼写错误并将新版本的库发送给客户,则他们无法在不更改和重新编译代码的情况下使用该库.因此,您可能希望忽略此API上的FxCop违规.另一方面,如果您从未发货过,那么修复FxCop违规将完全没问题.

解决方法:

Does SuppressMessage works for FxCopcmd.exe?

是.您需要使用定义的CODE_ANALYSIS编译符号进行编译,以便将SuppressMessage属性包含在程序集中.一旦他们在那里,FxCop引擎将识别它们,无论用于运行分析的机制如何.

Why I get errors if Action is Warning, using Fxcopcmd.exe?

写入FxCop生成的报告的问题级别始终使用规则作者指定的级别.从Visual Studio中运行时,Visual Studio集成插件会使用规则集中指定的级别覆盖此级别.运行fxcopcmd.exe时,将规则配置为警告与错误之间的唯一区别是检测到错误级别规则违规将导致fxcopcmd.exe返回非零退出代码,从而允许您中断自动构建.

如果您希望fxcopcmd.exe在生成报告时使用级别覆盖,则可能需要考虑在http://visualstudio.uservoice.com/处提出建议.

标签:c,visual-studio-2010,suppress-warnings,code-analysis,fxcopcmd
来源: https://codeday.me/bug/20190625/1286078.html