Я понял это вскоре после публикации.
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