05 February 2009
FxCop(Code Analysis) для нормального кода
Нещодавно я писав про те що ми врубили Code Analysis, а сьогодні я розповім про те як ми його вирубили ;).
Отже, малюнок олією… Ти натискаєш Ctrl+Shift+B (Build Solution) і йдеш пити чай. Адже Code Analysis включений в білд, це 30-60 секунд на кожен проект, а проектів пару десятків… А я без білдів не можу…
Рішення #1, RunCodeAnalysis в Always
Ми просто перенесли аналіз на білд сервер(TFS Build Server). Для того щоб це зробити, достатньо в MSBuild скрипті встановити RunCodeAnalysis в Always. Наприклад це можна зробити за допомогою такого кода:
1: <PropertyGroup>
2: <RunCodeAnalysis Condition=" '$(RunCodeAnalysis)'=='' ">Always</RunCodeAnalysis>
3: </PropertyGroup>
А можна і за допомогою аргументу…
1: /p:RunCodeAnalysis=Always
Always буде ігнорувати налаштування проекту, і завжди буде робити аналіз коду. А отже тепер за бажанням можна вимкнути аналіз на кожний білд.
Нижче інші значення RunCodeAnalysis
| Default |
Це значення по замовчуванню, означає що все залежить від налаштувань кожного проекту. |
| Always |
Буде завжди робити аналіз |
| Never |
Ніколи… |
Рішення #2, Локальний перезапис
Хоча є ще одне рішення… Воно значно деструктивніше ;), там нам важливий результат. Просто додати юзер оверрайди для проекту..
Додаємо файл MyProj.csproj.user з таким вмістом:
1: <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
2: <PropertyGroup>
3: <RunCodeAnalysis>false</RunCodeAnalysis>
4: </PropertyGroup>
5: </Project>
І все! На локальній тачці аналіз не запускається, а вже на білд сервері так. Головне перед чекіном на забувати таки зробити аналіз…
Рішення #3, Окрема конфігурація
Тримати окрему білд-конфігурацю для білд-серверу. Тобто усі по замовчуванню нічого не аналізують, а спеціальна білд-конфігурація для сервера аналізує. Єдине що мені заважє жити, так це підтримка ще однієї конфігурації…
Рішення #4, IsDesktopBuild
А можна ще відокремити локальний та серверні білди …
1: Condition=" '$(IsDesktopBuild)'!='true' "
Висновок
Так чи інакше, а вибір є ;), швидких вам білдів!
Цікавлюсь DDD. Більшість часу витрачаю на доньку. А ще вел!