Отключить анализ кода для некоторых проектов с использованием MSBuild
Я унаследовал файл решения, который использует MSBuild script для компиляции нескольких решений. Большинство проектов сконфигурированы с помощью анализа и наборов правил, и у меня есть несколько проектов с единичным тестированием, которые этого не делают.
Проекты с анализом:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineConstants>CODE_ANALYSIS;DEBUG;TRACE</DefineConstants>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<PlatformTarget>x86</PlatformTarget>
<CodeAnalysisRuleSet>..\OurRules.ruleset</CodeAnalysisRuleSet>
<RunCodeAnalysis>true</RunCodeAnalysis>
</PropertyGroup>
Проекты с анализом отключены:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<PlatformTarget>x86</PlatformTarget>
<RunCodeAnalysis>false</RunCodeAnalysis>
</PropertyGroup>
Когда я запускаю свою сборку script, похоже, что некоторые проекты не соответствуют настройкам проекта:
msbuild.exe BuildScript.proj /p:SolutionRoot=%cd%; /p:Configuration=Debug /p:Platform:x86 /p:RunCodeAnalysis=True
Когда я проверяю выходную папку, я вижу результаты анализа xml для анализа проектов, для которых флаг RunCodeAnalysis установлен в false. Может кто-нибудь помочь мне понять, что здесь происходит?
Ответы
Ответ 1
Я понял это вскоре после публикации.
Team Build поддерживает следующие значения для RunCodeAnalysis: Always, Default, Never.
В отличие от этого локально MSBuild поддерживает True или False для RunCodeAnalysis.
Почему они разные? При просмотре файла Microsoft.TeamFoundation.Build.targets появляется следующее сообщение:
<Target Name="CoreCompileSolution">
<PropertyGroup>
<CodeAnalysisOption Condition=" '$(RunCodeAnalysis)'=='Always'">RunCodeAnalysis=true</CodeAnalysisOption>
<CodeAnalysisOption Condition=" '$(RunCodeAnalysis)'=='Never'">RunCodeAnalysis=false</CodeAnalysisOption>
...
</PropertyGroup>
...
</Target>
Эти параметры затем передаются в процесс msbuild, когда он компилирует файл решения.
Итак, другими словами:
Всегда сообщает MSBuild компилировать все проекты с помощью RunCodeAnalysis = True
Никогда говорит MSBuild о том, чтобы подавлять анализ кода (RunCodeAnalysis = False) для всех проектов.
... и не указывая значение для RunCodeAnalysis, означает, что MSBuild будет соблюдать параметр RunCodeAnalysis в файле проекта. Следовательно, параметр по умолчанию.
Просто удаление /p: RunCodeAnalysis из моего исходного вопроса имеет правильный результат. Проекты, в которых включен анализ, будут выполнять анализ кода. Проекты без настройки не выполняют никакой дополнительной работы.
Более подробную информацию об этом можно найти здесь: http://www.bryancook.net/2011/06/build-server-code-analysis-settings.html
Ответ 2
Изменить:
<RunCodeAnalysis>false</RunCodeAnalysis>
To:
<RunCodeAnalysis>Never</RunCodeAnalysis>
... и посмотрите, решит ли это вашу проблему. Допустимые значения для RunCodeAnalysis
: {Default
, Always
, Never
} или {True
, False
}, в зависимости от того, как вы строите.
Подробнее см. в пункте 12 раздела Как изменить тип сборки.
Также см. эту статью для несоответствий в настройках RunCodeAnalysis в зависимости от того, как вы создаете: Непоследовательные значения RunCodeAnalysis