Visual Studio 静的コード分析によるストア アプリの Visual Basic および C# のコード品質の分析
Visual Studio Express のコード分析ツールは、コードを調べてプログラミング上の一般的な問題や違反がないことを確認します。 コード分析の警告はコンパイラのエラーや警告とは異なります。コード分析ツールは、有効であってもコードの作成者やコードを利用する他のユーザーにとって問題になる可能性がある特定のコード パターンを検索します。 また、コード分析では、テストでは検出できないコードの欠陥を見つけることができます。 開発プロセス中に定期的にコード分析ツールを実行することで、高品質なアプリを完成させることができます。
注意
Visual Studio Ultimate、Visual Studio Premium、および Visual Studio Professional では、コード分析の全機能を使用できます。MSDN ライブラリの「コード分析ツールを使用したアプリケーション品質の分析」を参照してください。
このトピックの内容
以下について説明します。
コード分析の実行
Visual Studio ソリューションでコード分析を実行するには:
- [ビルド] メニューの [ソリューションでコード分析を実行] をクリックします。
プロジェクトをビルドするたびに自動的にコード分析を実行するには:
ソリューション エクスプローラーでプロジェクト名を右クリックし、[プロパティ] をクリックします。
プロジェクトのプロパティ ページで、[コード分析] をクリックして、[ビルドに対するコード分析の有効化 (定数 CODEANALYSIS を定義)] をクリックします。
ソリューションがコンパイルされ、コード分析が実行されます。 結果は、[コード分析] ウィンドウに表示されます。
コード分析警告の分析と解決
特定の警告を分析するには、[コード分析] ウィンドウで警告のタイトルをクリックします。 警告が展開され、問題に関する詳細情報が表示されます。
警告を展開すると、警告の原因となったコード行が Visual Studio のコード エディターで強調表示されます。
何が問題かを理解したら、コードを修正してそれを解決できます。 コード分析を再度実行して、[コード分析] ウィンドウに警告が表示されないこと、および修正によって新しい警告が発生しないことを確認します。
ヒント
コード分析は、[コード分析] ウィンドウから再実行できます。[分析] をクリックし、分析の範囲を選択します。ソリューション全体または選択したプロジェクトの分析を再実行できます。
コード分析警告の抑制
コード分析警告の修正を行わないことを決定する場合があります。 コードを実装したときの警告の発生確率と、警告を解決するためのコード変更の量を比較して、解決しないことを選択できます。 または、警告で使用された分析が特定のコンテキストでは不適切であると判断できます。 個々の警告を抑制して、[コード分析] ウィンドウに表示されないように設定できます。
警告を抑制するには:
詳細情報が表示されていない場合は、警告のタイトルをクリックして展開します。
警告の下部にある [アクション] リンクをクリックします。
[メッセージの非表示] をポイントし、[ソース内] または [抑制ファイル内] をクリックします。
[ソース内] をクリックすると、警告を生成したメソッドの上のソース ファイルに SuppressMessage 属性が挿入されます。 これにより、抑制が検出されやすくなります。
[抑制ファイル内] では、プロジェクトの GlobalSuppressions.cs ファイルに SuppressMessage 属性を追加します。 これにより、抑制を簡単に管理できるようになります。 GlobalSuppression.cs に追加された SuppressMessage 属性は、警告を生成したメソッドもターゲットとすることに注意してください。 警告がグローバルに表示なしになることはありません。
ソース ファイルで警告を抑制するか、抑制ファイルで警告を抑制するかは、コーディング スタイルとニーズによって決まります。
コード分析結果の検索とフィルター処理
警告メッセージの長い一覧の検索と、複数のプロジェクトから成るソリューションの警告をフィルター処理できます。
Visual Studio Express 2012 for Windows 8 では、コード分析のすべての警告に、警告の重大度レベルが示されています。
Visual Basic および C# コード分析警告
コード分析では次の警告が発生します。
CA1001: Types that own disposable fields should be disposable
CA1821: Remove empty finalizers
CA2213: Disposable fields should be disposed
CA2229: Implement serialization constructors
CA2231: Overload operator equals on overriding ValueType.Equals