Выполнение статического анализа кода .NET 4.0 (FxCop) с VS 2010 Professional - PullRequest
8 голосов
/ 06 октября 2010

У меня VS 2010 Professional (что, в отличие от Premium , включает не доступ к конфигурации анализа кода в IDE) и решение C # 4содержащий много десятков проектов.Я хочу провести статический анализ кода как часть компиляции решения.

Возможные способы, которые я определил с помощью SO и Google:

  • Редактировать каждый .csproj в решении включить вызов автономного FxCop 10 в качестве события после сборки.Плюсы: происходит на каждой компиляции для каждого проекта, который перестраивается.Минусы: необходимо принять дополнительные меры для обеспечения того, чтобы в новых проектах это указывалось

  • Создать новый проект или определить существующий проект, который всегда создается последним, из-за зависимостей проекта.Дайте (просто) этому проекту событие Post-build, которое запускает FxCop на всех сборках в (общей) выходной папке.Плюсы: только один файл для обновления и меньше вероятность того, что будущие проекты останутся без анализа.Минусы: капризы зависимостей сборки могут означать, что это на самом деле не работает

  • Обновите экземпляры VS всех разработчиков с помощью надстройки или макроса, который запускает FxCop после любой сборки.Эта идея вообще не нравится.

Есть ли другие варианты, которые явно лучше, чем любой из вышеперечисленных?Есть ли какие-либо предупреждения или замечания, о которых мне нужно знать, чтобы заставить работать одно из вышеперечисленных?

Я также хочу, чтобы FxCop запускался как часть MSBuild 4.0 -компилированной сборки на сервере сборки.Какие из вариантов позволят мне повторно использовать наборы правил анализа кода между компиляцией рабочего стола и компиляцией bulid-сервера?


Я уже прочитал связанные, но не идентичные уже существующие вопросы, включая:

Ответы [ 6 ]

7 голосов
/ 27 октября 2010

Для интеграции FxCop как части сценария сборки (MSBuild) я использую задачу FxCop из MSBuild.Community.Tasks . Используя FxCop, я создаю проект FxCop (FxCopProject.FxCop), который определяет используемые правила и сборки для проверки.

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <PropertyGroup>
  <MSBuildCommunityTasksPath>$(MSBuildProjectDirectory)\vendor\MSBuild.Community.Tasks.v1.3.0.504</MSBuildCommunityTasksPath>
  <FxCopDir>vendor\Microsoft Fxcop 10.0</FxCopDir>
 </PropertyGroup>
 <Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets"/>

 <Target Name='FxCopReport'>
  <FxCop
   ToolPath='$(FxCopDir)'
   ProjectFile='FxCopProject.FxCop'
   AnalysisReportFileName='FxCopReport.xml'
  />
 </Target>
</Project>
3 голосов
/ 06 октября 2010

Я использовал Hudson в качестве сервера сборки, который будет выполнять анализ кода после сборки приложений .NET.Чтобы использовать его для этой цели, вам необходимо установить два плагина:

  • MSBuild плагин для сборки приложений .NET.
  • Нарушения Плагин, который сообщает о результатах анализа кода и поддерживает FxCop и StyleCop.

Hudson необходимо настроить для выполнения FxCop и StyleCop, но это не очень сложно сделать с помощью командных файлов.Преимущество заключается в том, что ни один из ваших файлов проекта не нужно будет настраивать, так как анализ кода будет выполняться извне;то есть не через Visual Studio.

Вы можете настроить Hudson для выполнения анализа кода как ежедневной задачи или даже при каждом изменении ваших приложений.Тогда все сотрудники вашей группы разработчиков смогут просматривать результаты анализа кода через Hudson, чтобы определить, не допустили ли они каких-либо нарушений.

2 голосов
/ 06 октября 2010

Я некоторое время не использовал FxCop, но если у вас много проектов, я подозреваю, что запускать его один раз для каждого проекта, а не только один раз в конце, будет болезненно.Вы можете попробовать (или хотя бы начать с) что-то вроде this .Короче говоря, у вас есть uber-проект с целями, которые зависят от построения всего вашего решения, после чего следует запуск FxCop (или модульных тестов и т. Д.). Вы вызываете uber-проект, используя пакетный файл из обозревателя решений.

Это похоже на ваше второе предложение, но не будет зависеть от порядка сборки и не требует возиться с новыми проектами.К сожалению, его текущее воплощение нарушает обычные сочетания клавиш для сборки из VS, и, вероятно, будет легко обойтись случайно, но возможно, что его можно будет улучшить.

Он также может быть чище и лучше интегрирован с VSиспользовать цель MSBuild для запуска FxCop вместо шага после сборки.

1 голос
/ 19 октября 2010

Альтернативой FxCop было бы использование инструмента NDepend, который позволяет писать Правила кода для запросов C # LINQ (а именно CQLinq) . Отказ от ответственности: я являюсь одним из разработчиков инструмента

По умолчанию предлагается более 200 правил кода .Настроить существующие правила или создать свои собственные правила кода просто благодаря хорошо известному синтаксису C # LINQ.

Правила можно проверить вживую в Visual Studio и в BuildВремя обработки в сгенерированном отчете HTML + javascript .

0 голосов
/ 11 августа 2014

Я знаю, что это старый вопрос, но лучший вариант IMO - использовать SonarQube с плагином C # для проведения анализа.Это обрабатывает FxCop как один из вариантов анализа, а также дает возможность выполнять анализ StyleCop и ReSharper (с использованием бесплатного средства запуска командной строки) и компилируется в один веб-интерфейс.

Это займет немного времени для настройкипервый проект, но настройка последующих проектов очень похож и может быть запущен вашим CI-сервером.

0 голосов
/ 23 января 2014

Создание пользовательского действия по сборке (которое запускается на основе свойства, заданного нами в определении сборки):

  1. Мое пользовательское действие выполняет поиск всех файлов * .csproj в корневой папке.
  2. Обновляет все файлы csproj для добавления свойства "

    true

  3. Сохранение файла csproj.

  4. Сейчасэто приведет к запуску анализа кода при его компиляции.

Это означает, что мы можем контролировать, когда анализ кода должен выполняться или нет. Нам не нужно запускать его каждый раз, когда мы создаемcode.

Просто прочитайте, что у вас нет премиум-класса VS, но вы можете выполнить тот же процесс, чтобы обновить событие после сборки файла csproj во время сборки.

...