Отключить анализ кода для некоторых проектов с использованием MSBuild - PullRequest
12 голосов
/ 19 июня 2011

Я унаследовал файл решения, который использует сценарий MSBuild для компиляции нескольких решений.Большинство проектов настроены с использованием анализа и наборов правил, и у меня есть несколько проектов модульных тестов, которые этого не делают.

Проекты с включенным анализом:

<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>

Когда я запускаю свой скрипт сборки, похоже, что некоторые проекты не соответствуют настройкам проекта:

msbuild.exe BuildScript.proj /p:SolutionRoot=%cd%; /p:Configuration=Debug /p:Platform:x86 /p:RunCodeAnalysis=True

Когда я проверяю выходную папку, я вижу анализ покрытия xmlвыходные данные для проектов, для которых для флага RunCodeAnalysis установлено значение false.Может ли кто-нибудь помочь мне понять, что здесь происходит?

Ответы [ 2 ]

20 голосов
/ 19 июня 2011

Я понял это вскоре после публикации.

Team Build поддерживает следующие значения для RunCodeAnalysis: Всегда , По умолчанию , Никогда .

И наоборот, локально 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 при компиляции файла решения.

То есть другими словами:

Always указывает MSBuild компилировать все проекты с RunCodeAnalysis = True

Никогда не сообщает MSBuild о прекращении анализа кода ( RunCodeAnalysis = False) во всех проектах.

... и без указания значения для RunCodeAnalysis означает, что MSBuild будет учитывать настройку RunCodeAnalysis в файле проекта. Следовательно, значение по умолчанию .

Простое удаление / p: RunCodeAnalysis из моего исходного вопроса дало правильный результат. В проектах, в которых включен анализ, будет выполняться анализ кода. Проекты без настройки не выполняют никакой дополнительной работы.

Более подробная информация об этом доступна здесь: http://www.bryancook.net/2011/06/build-server-code-analysis-settings.html

8 голосов
/ 19 июня 2011

Изменение:

<RunCodeAnalysis>false</RunCodeAnalysis>

Кому:

<RunCodeAnalysis>Never</RunCodeAnalysis>

... и посмотрим, решит ли это вашу проблему. Допустимые значения для RunCodeAnalysis: {Default, Always, Never} или {True, False}, в зависимости от способа построения.

См. Пункт 12 из Как: отредактировать тип сборки для получения дополнительной информации.

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

...