RunCodeAnalysis = true не работает в командной строке (MSBuild)
Я пытаюсь получить msbuild для вывода информации анализа кода, как это происходит в VS. У меня есть конфигурация для моего проекта под названием "CodeAnalysis" в VS, который настроен для запуска анализа кода при сборке (с минимальным набором правил). В любом случае, это отлично работает в VS, но когда я запускаю msbuild из командной строки, он показывает только основные предупреждения о сборке и вообще не выполняет анализ кода. Кто-нибудь знает, почему это происходит?
Конфигурация в файле проекта:
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'CodeAnalysis|AnyCPU'">
<OutputPath>bin\</OutputPath>
<CodeAnalysisRuleSet>C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\Rule Sets\MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<RunCodeAnalysis>true</RunCodeAnalysis>
Командная строка:
msbuild Solution.sln /p:Configuration=CodeAnalysis /t:Rebuild
Я также пробовал:
msbuild Solution.sln /p:RunCodeAnalysis=true /t:Rebuild
Ответы
Ответ 1
По умолчанию MSBuild использует значение, настроенное в файле проекта, но вы можете переопределить его в командной строке msbuild
, используя аргумент
/p:RunCodeAnalysis=true
всегда выполнять анализ кода. И наоборот, используйте
/p:RunCodeAnalysis=false
чтобы отключить анализ кода.
См. также:
Ответ 2
Вам нужно, чтобы Visual Studio была установлена на компьютере. Есть много сценариев, которые включены через строку csproj:
Поскольку у вас установлен VS (надлежащей версии), он будет включать в себя файл целей FxCop и начнет анализ кода для вас.
Ответ 3
Как только я столкнулся с той же проблемой, я начал с получения (overly) подробного журнала и отправил его в файл, который я мог проверить:
msbuild.exe ProjectFile.csproj /v:diag > bld.log
В этом файле я заметил, что цель анализа кода была пропущена, потому что RunCodeAnalysisOnThisProject оценивается как true. Итак, в csproj я включил следующую строку в первую группу свойств:
<RunCodeAnalysisOnThisProject>true</RunCodeAnalysisOnThisProject>
который сделал это для меня.