4

私はこのようなクラスを持っています:

    [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:

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

2 つの問題:

  • エラーが表示されますが、CA1709 ルールのアクションは警告です
  • SuppressMessage は FxCopcmd.exe を使用して無視されます

ここで、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 を使用して、Action が Warning の場合にエラーが発生するのはなぜですか?
  • 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 違反を修正しても問題ありません。

4

1 に答える 1

4

SuppressMessage は FxCopcmd.exe に対して機能しますか?

はい。CODE_ANALYSISSuppressMessage 属性をアセンブリに含めるには、コンパイル シンボルを定義してコンパイルする必要があります。それらがそこにあると、分析の実行に使用されるメカニズムに関係なく、FxCop エンジンはそれらを認識します。

Fxcopcmd.exe を使用して、Action が Warning の場合にエラーが発生するのはなぜですか?

FxCop で生成されたレポートに書き込まれる問題レベルは、常にルールの作成者によって指定されたレベルを使用します。Visual Studio 内から実行すると、Visual Studio 統合プラグインは、このレベルをルールセットで指定されたレベルでオーバーライドします。fxcopcmd.exe を実行する場合、ルールを警告として構成する場合とエラーとして構成する場合の唯一の違いは、エラー レベルのルール違反が検出されると、fxcopcmd.exe がゼロ以外の終了コードを返すことです。自動ビルド。

fxcopcmd.exe がレポートを生成するときにレベルのオーバーライドを使用することを希望する場合は、http://visualstudio.uservoice.com/で提案を行うことを検討してください。

于 2013-02-05T13:46:30.840 に答える