1

私は現在、大規模なコードベースで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バージョンを作成できるかどうかはわかりません。

4

3 に答える 3

1

FxCopを実行して、XMLレポートを取得し、それをXSLとペアリングすると、グラフィカルなプレゼンテーションが得られます。選択できるXSLシートはいくつかあると思いますが、これでうまくいくと思います

通常、問題のプロジェクトのmsbuildファイルを使用して、CruiseControl.NETにこれを実行させます。

于 2009-07-15T08:43:11.637 に答える
0

レポートをネストすることでこれに対処するXML形式で出力を取得できます。

これに加えて、XSLTを使用すると、適切にフォーマットされたHTMLページを取得できます。理想的には次のようになります。

Collated style report for solution: 0 messages

Generated: 13/07/2009 11:23:49
于 2009-07-15T08:40:06.447 に答える
0

良い答えですが、ASCIIのプレーンログファイルにしかアクセスできないため、XSLTはここでは機能しません。

各行から名前空間を推測しようとする独自のパーサーを作成することで、これを解決しました。警告のある行に名前空間が含まれていない場合は、最後に見つかった名前空間が使用されます。

優れた作品。

于 2009-07-20T12:11:46.027 に答える