コード分析結果への対処
コード分析を行い、コードの問題点が明らかになったところで、今度はその修正を行っていきましょう。
指摘事項の修正
コード分析結果では簡単なヒントは表示されますが、その指摘の詳細は分かりません。詳細を知るには、分析結果内の"CA9999"といったリンクをクリックしましょう。MSDNライブラリ内の該当ページがWebブラウザで表示されます(図6)。
ヒントとこの詳細内容を元に、コードを実際に修正していきます。例えば、「CA1709: 識別子では、大文字と小文字が正しく区別されなければなりません」というルールで、名前空間名、クラス名、そしてメソッド名の3か所が指摘されていますので、詳細ページに表示された通り、「大文字始まりの単語区切り大文字」という、いわゆる「PascalCase」な名前に修正します(リスト2)。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CodeAnalysis // 名前空間名の修正 { public class SomeClass // クラス名の修正 { public void DoSomething(int count, int i) // メソッド名の修正 { var newCount = countUp(count); } private int countUp(int count) { return count + 1; } private static void UnUseMethod() { } } }
修正したら再びコード分析を実行し、CA1709の指摘がなくなったことを確認しましょう。
コード分析結果の抑制
コード分析によって指摘された内容の中には、そのシステムの状況によっては対処する必要がないものも含まれます。こういった警告については、「抑制」することで次回以降のコード分析実行時に、その箇所が無視されるようになります。
抑制にはソース内で直接指定する方法と、「抑制ファイル」というファイルにまとめて記述する方法の2種類があります。どちらも、ツールで自動的に行ってくれますので心配はいりません。順番にやり方を見ていきましょう。
ソース内で指定する方法
まずはソース内での抑制です。例えばCA1704として指摘されている警告は「メソッドのパラメータ名をiではなくもっと意味のある名前に変更しろ」というものですが、場合によってはiという名前がふさわしいケースもあります。今回はそのケースに該当したとみなして抑制してみましょう。
「コード分析」ウィンドウでCA1704を選択すると、項目の右下に「操作」というリンクが表示されるので、「メッセージの非表示」→「ソース内」を選択します(図7)。すると、該当箇所にSystem.Diagnostics.SuppressMessage属性が付けられ、抑制するルールとその対象となるモノの名前等(今回はパラメータ名i)が設定されます。
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "i") public void DoSomething(int count, int i) { var newCount = countUp(count); }
抑制ファイルで指定する方法
次に抑制ファイル内での抑制です。例えばCA2210として指摘されている警告は「アセンブリに厳密名をつけるために署名しろ」という内容ですが、小さな範囲で閉じたシステムでは、そこまでしなくてもよいケースもあります。今回はそのケースに該当したとみなして抑制してみましょう。
方法はソース内と同様で、「操作」→「抑制ファイル内」と選択するだけです(図8)。すると、プロジェクトにGlobalSuppressions.csという名前の「抑制ファイル」が作成され、ソース内と同じようにSuppressMessage属性が追加されます。
// このファイルは、このプロジェクトに適用される SuppressMessage //属性を保持するために、コード分析によって使用されます。 // プロジェクト レベルの抑制には、ターゲットがないものと、特定のターゲット //が指定され、名前空間、型、メンバーなどをスコープとするものがあります。 // // このファイルに抑制を追加するには、[コード分析] の結果でメッセージを // 右クリックし、[メッセージの非表示] をポイントして、 // [抑制ファイル内] をクリックします。 // このファイルに手動で抑制を追加する必要はありません。 [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA2210:AssembliesShouldHaveValidStrongNames")]
抑制した状態でコード分析を行い、指摘されなくなっていることを確認しましょう。なお、抑制を解除するには、該当するSuppressMessage属性を削除してください。