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 FxCop(FxCopCmd.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** ⚠️