MS_FxCop - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

FxCop

概要

  • ビルド出力のアセンブリが分析対象

  • 基本的に Microsoft が提供する
    「クラス ライブラリ開発のデザインガイドライン」
    に基づいてアセンブリを分析する。

  • アドバイスを盲目的に適用するのは危険

  • チェックルールのカテゴリ

    1. デザイン(設計)
    2. グローバリゼーション(国際化対応)
    3. インターオペラビリティ(相互運用性)
    4. モバイル
    5. 命名規約
    6. パフォーマンス
    7. ポータビリティ(移植性)
    8. セキュリティ
    9. セキュリティ透過性
    10. 語法・使用法

補足(「盲目的に適用するのは危険」): この注意は重要で、
FxCop の指摘には文脈に依存するものが多く含まれる。

指摘内容 実際には
CA1062 引数の null チェックを要求 internal な呼び出しでは冗長になることがある
CA1707 識別子にアンダースコアを使わない テストメソッド名では慣習的に使う
CA1305 IFormatProvider を明示 内部処理では不要なことも多い
CA2007 ConfigureAwait(false) を要求 ASP.NET Core では不要(同期コンテキストが無い)

したがって、ルールを取捨選択し、
採用したものは CI でビルド失敗として扱う
というのが正しい運用になる
(全部を警告のまま放置すると、誰も見なくなる)。

詳細

補足(最新化:.NET アナライザーへ): FxCop の系譜は
以下のように移り変わっている。

世代 名称 分析対象
〜2019 FxCopFxCopCmd.exe / VS 統合) ビルド後のアセンブリ(IL)
2019〜2020 FxCop アナライザー(Microsoft.CodeAnalysis.FxCopAnalyzers ソースコード(Roslyn)
2020〜 .NET アナライザー(SDK に同梱 ソースコード(Roslyn)

現在は .NET SDK に標準搭載されており、

<PropertyGroup>
  <EnableNETAnalyzers>true</EnableNETAnalyzers>
  <AnalysisLevel>latest</AnalysisLevel>
  <AnalysisMode>Recommended</AnalysisMode>
</PropertyGroup>

のように .csproj で有効化する(net5.0 以降は既定で有効)。
ルール ID(CA1062 など)は FxCop 時代から引き継がれている。

アセンブリ(IL)ではなくソースを見るようになったことで、

  • ビルドしなくても、入力中にリアルタイムで警告が出る
  • Code Fix による自動修正ができる
  • クロスプラットフォームで動く

という利点が生まれた。
一方、第三者から提供されたアセンブリだけを検査する用途は
失われている(旧 FxCop 独自の利点だった)。

補足(現在の静的解析の全体像): .NET では以下が併用される。

種類 観点
コード品質 CA**(.NET アナライザー) 設計・性能・セキュリティ
コード スタイル IDE**(.NET SDK 同梱) 書式・言語機能の使い方
書式ルール SA**(StyleCop.Analyzers) 空行・順序・コメント
セキュリティ **CA2100 系 / SonarQube / CodeQL 脆弱性

すべて .editorconfig で重大度を一元管理でき、
dotnet build / CI で同じ結果になる。
脆弱性検査については
Webアプリケーション脆弱性対策も参照。

参考

StyleCop

StyleCop

Jenkins構築手順

Jenkins構築手順


Tags: 移行, テスト, デバッグ, .NET開発, ツール類, ドキュメンテーション, CI

⚠️ **GitHub.com Fallback** ⚠️