В настоящее время я пишу инструмент, который анализирует файл журнала 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 создает отдельные файлы FxCop в XML для каждой сборки, но файл, содержащий ВЕСЬ файл журнала, имеет формат, описанный выше.
Есть лучшие идеи или предложения?
Хорошие предложения! Некоторая дополнительная информация, касающаяся файла журнала. Этот файл журнала создается командой Team Foundation Server. Я не знаю, возможно ли создать из него версию XML.