私は現在、大規模なコードベースでFxCopログファイルを解析するツールを作成しています。私の目標は、名前空間(アプリケーションのサブシステム)でソートされた、最も一般的な警告に関するグラフィカル情報を提供することです。
次に、これを使用して、関心のあるFxCopルールと、それらを削除するために実行する必要のあるアクションについてのディスカッションを開始できます。
ログファイルには、2種類のエントリが含まれています。名前空間が行自体から推測できるものとそうでないもの。以下の例を参照してください。
[Any CPU/Release] LoggerWrapper.cs(647,28): warning CS1574: XML comment on 'CompanyName.Utilities.Logging.Internal.LoggerWrapper.WarningException(System.Exception, short, long)' has cref attribute 'CompanyName.Common.Services.Logging.LoggerWrapper.Warning(string)' that could not be resolved
この警告は名前空間CompanyName.Commonに属していることがわかります。
[Any CPU/Release] d:\Bld\CompanyName\2010_MAIN_F\Sources\CompanyName\Utilities\Logging\Store\EventViewer\NativeHelper.cs(254,0): warning : CA1307 : Microsoft.Globalization : 'NativeHelper.GetSid(string, out IntPtr)' makes a call to 'string.IndexOf(string)' that does not explicitly provide a StringComparison. This should be replaced with a call to 'string.IndexOf(string, StringComparison)'.
[Any CPU/Release] (-1,0): warning : CA1823 : Microsoft.Performance : It appears that field 'NativeHelper.IIsApplicationPoolSettingProperty' is never used or is only ever assigned to. Use this field or remove it.
[Any CPU/Release] (-1,0): warning : CA1823 : Microsoft.Performance : It appears that field 'NativeHelper.IIsSettingProperty' is never used or is only ever assigned to. Use this field or remove it.
このエントリでは、最後の2つの警告を名前空間に解決できません。CompanyName.Utilities名前空間に関係していると推測できるようにするには、最初の行に戻る必要があります。
この状況にどのように対処しますか?100%確実なIDを探しているわけではありませんが、ほとんどの警告を対応する名前空間に解決できるようにしたいと思います。
これまでの私の戦略: 2パスパーサーを検討しています。最初に、同じ行から名前空間情報を推測できる行を解析します。2番目のパスでは、名前空間情報がない行を検索し、その位置から名前空間情報がある最初の行に戻ります。
FxCopにXMLを生成させる機能がありません。Team Foundation Serverは、アセンブリごとにXMLで個々のFxCopファイルを作成しますが、ログファイル全体を含むファイルは上記の形式になっています。
より良いアイデアや提案はありますか?
これまでのところ素晴らしい提案です!ログファイルに関するいくつかの追加情報。このログファイルは、TeamFoundationServerのteambuildによって生成されます。それからXMLバージョンを作成できるかどうかはわかりません。