2011-06-18 3 views
10

Я унаследовал файл решения, который использует сценарий MSBuild для компиляции нескольких решений. Большинство проектов сконфигурированы с помощью анализа и наборов правил, и у меня есть несколько проектов с единичным тестированием, которых нет.Отключить анализ кода для некоторых проектов с использованием 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. Может кто-нибудь помочь мне понять, что здесь происходит?

ответ

18

Я понял это сразу после его размещения.

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

В отличие от локально MSBuild поддерживает Правда или Ложные для 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

8

Изменение:

<RunCodeAnalysis>false</RunCodeAnalysis> 

To:

<RunCodeAnalysis>Never</RunCodeAnalysis> 

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

См.: Пункт 12 из How to: Edit a Build Type для получения дополнительной информации.

Кроме того, в этой статье для несоответствиях в настройках RunCodeAnalysis, в зависимости от того, как вы строите: Inconsistent RunCodeAnalysis values

+1

Это местная, не команда сборки. Когда я устанавливаю его в False, анализ не выполняется для всех проектов. – bryanbcook