Разбор файла журнала FxCop - как бы вы это сделали? - PullRequest
1 голос
/ 15 июля 2009

В настоящее время я пишу инструмент, который анализирует файл журнала 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.

Ответы [ 3 ]

1 голос
/ 15 июля 2009

Запустите FxCop, чтобы получить отчет XML, соединить его с XSL и получить графическое представление. Я думаю, что есть несколько листов XSL на выбор, но Я думаю, что этот делает свое дело .

Обычно я позволяю CruiseControl.NET сделать это для меня, используя файл msbuild рассматриваемого проекта.

0 голосов
/ 20 июля 2009

Хорошие ответы, но у меня есть доступ только к простому лог-файлу в ASCII, поэтому XSLT здесь не будет работать.

Я решил это, написав свой собственный синтаксический анализатор, который пытается вывести пространство имен из каждой строки. Если строка с предупреждением не содержит пространства имен, она занимает последнее найденное пространство имен.

Работает отлично.

0 голосов
/ 15 июля 2009

Вы можете получить вывод в формате XML, который решает эту проблему путем вложения отчетов.

Это, плюс доза XSLT, может дать вам красиво отформатированную HTML-страницу, которая в идеале должна выглядеть как

Collated style report for solution: 0 messages

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