我目前正在编写一个在大型代码库上解析 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 文件,但包含整个日志文件的文件采用上述格式。
有更好的想法或建议吗?
到目前为止很好的建议!有关日志文件的一些额外信息。此日志文件由 Team Foundation Server 团队构建生成。我不知道是否可以从中创建 XML 版本。