簡體   English   中英

解析FxCop日志文件-您將如何做?

[英]Parsing FxCop logfile - how would you do it?

我目前正在編寫一個在大型代碼庫上解析FxCop日志文件的工具。 我的目標是提供有關最常見警告的圖形信息,並按名稱空間(應用程序的子系統)進行排序。

參見示例圖形。

然后,可以使用它開始討論我們關心的FxCop規則以及應采取哪些措施將其刪除。

日志文件包含兩種類型的條目。 一種可以從行本身推導出名稱空間,而另一種則不能。 請參閱以下示例:

[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.

在此條目中,您無法將最后兩個警告解析為名稱空間。 您必須回溯到第一行才能推斷出它與CompanyName.Utilities命名空間有關。

您將如何處理這種情況? 我不是在尋找100%可靠的標識,但我希望能夠將大多數警告解析為相應的名稱空間。

到目前為止,我的策略是:我正在考慮使用兩遍解析器。 首先,我將分析可從同一行推導出名稱空間信息的行。 在第二遍中,我將搜索不包含名稱空間信息的行,並將從該位置回溯到確實包含名稱空間信息的第一行。

我沒有能力讓FxCop生成XML。 Team Foundation Server確實會為每個程序集以XML創建單獨的FxCop文件,但是包含ENTIRE日志文件的文件的格式如上所述。

還有更好的想法或建議嗎?

到目前為止,很棒的建議! 有關日志文件的一些額外信息。 此日志文件由Team Foundation Server團隊生成。 我不知道是否可以從中創建XML版本。

運行FxCop,以便獲得XML報告,將其與XSL配對,並獲得圖形化演示。 我認為有一些XSL工作表可供選擇,但是我認為這一點可以解決問題

通常,我使用有關項目的msbuild文件讓CruiseControl.NET為我完成此任務。

您可以獲取XML格式的輸出,該輸出通過嵌套報告來解決。

加上XSLT,可以為您提供格式良好的HTML頁面-理想情況下,它應該看起來像

Collated style report for solution: 0 messages

Generated: 13/07/2009 11:23:49

好的答案,但是我只能訪問ASCII格式的純日志文件,因此XSLT在這里不起作用。

我通過編寫自己的解析器來嘗試解決這一問題,該解析器試圖從每一行推導出一個名稱空間。 如果帶有警告的行不包含名稱空間,它將采用最后找到的名稱空間。

作品出色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM