Предотвращение создания проекта MSBuild в .sln без использования конфигураций решений - PullRequest
8 голосов
/ 12 мая 2011

Я хочу запретить сборку определенных проектов в рамках решения (в конфигурации TeamCity Build, чтобы оптимизировать скорость обратной связи Commit Build, если вы должны знать).

Я в курсемеханизма конфигураций решений, но не нужно заставлять множество файлов .sln заканчиваться каждой перестановкой вещей, которые я хочу отключить.У меня есть правило, основанное на Конвенции, где я хочу сказать: «Если я делаю компоновку коммитов, я не хочу делать финальную упаковку установщика».(И я не хочу разбивать его на отдельное решение).

Я бы предпочел не использовать решение, включающее поиск и замену, в файле .sln или в созданном файле .projчерез [MsBuildEmitSolution][1].Мне известны вопросы, которые охватывают готовое решение и этот слегка связанный вопрос .

Я вижу, MSBuild /v:diag говорит:

 2>Target "Build" in file "Z.sln.metaproj" from project "Z.sln" (entry point):
   Using "MSBuild" task from assembly "Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
   Task "MSBuild"
     Global Properties:
       BuildingSolutionFile=true
         CurrentSolutionConfigurationContents=<SolutionConfiguration>
   <ProjectConfiguration Project="{C83D035D-169B-4023-9BEE-1790C9FE22AB}" AbsolutePath="X.csproj" BuildProjectInSolution="True">Debug|AnyCPU</ProjectConfiguration>
   <ProjectConfiguration Project="{15E7887D-F1DB-4D85-8454-E4EF5CBDE6D5}" AbsolutePath="Y.csproj" BuildProjectInSolution="True">Debug|AnyCPU</ProjectConfiguration>
 </SolutionConfiguration>

Итак, вопрос в следующем:

Есть ли аккуратный способ заставить меня заменить XPath или подобный, чтобы иметь эффект изменения BuildProjectInSolution="True" до BuildProjectInSolution="False" для проекта Y выше

Если это не так, то существует ли относительно простойя могу выполнить редактирование в файле .ccproj (пакет Azure 1.4) или .csproj (общий проект), чтобы эффекты (включая запуск зависимых проектов) проекта были включены в командной строке msbuild Z.sln build buildбыть аннулированным?

Ответы [ 3 ]

3 голосов
/ 19 сентября 2013

Не уверен, что он квалифицируется как аккуратный , но вы можете установить CustomAfterMicrosoftCommonTargets для импорта файла msbuild, чтобы переопределить свойство BuildDependsOn, указывая его на вашу собственную задачу сборки. По сути, установив CustomAfterMicrosoftCommonTargets, вы получаете msbuild для импорта файла msbuild, содержащего следующее:

<PropertyGroup>
    <OldBuildDependsOn>$(BuildDependsOn)</OldBuildDependsOn>
    <BuildDependsOn>MyBuild</BuildDependsOn>
</PropertyGroup>

<Target Name="OldBuild" DependsOnTargets="$(OldBuildDependsOn)" />

<Target Name="MyBuild">
    <CallTarget Targets="OldBuild" Condition="<IfIWantThis>" /> 
</Target>

Редактировать

Вы можете использовать следующую цель MyBuild для включения / исключения проектов на основе регулярных выражений, передаваемых в свойствах IncludeInBuild и ExcludeFromBuild. (Если вам нужны сложные регулярные выражения, вы можете не справиться с выходом специального символа MSBuild, но этого достаточно для простого сопоставления)

> msbuild / p: ExcludeFromBuild = "Тесты | Установить | Azure"

<Target Name="MyBuild">
    <CallTarget Targets="OldBuild" Condition="('$(IncludeInBuild)'=='' OR
    '$([System.Text.RegularExpressions.Regex]::IsMatch($(MSBuildProjectFullPath),
    $(IncludeInBuild), 
    System.Text.RegularExpressions.RegexOptions.IgnoreCase))'=='True') AND 
    ('$(ExcludeFromBuild)'=='' OR 
    '$([System.Text.RegularExpressions.Regex]::IsMatch($(MSBuildProjectFullPath), 
    $(ExcludeFromBuild),  
    System.Text.RegularExpressions.RegexOptions.IgnoreCase))'=='False')" /> 
</Target>
3 голосов
/ 12 мая 2011

Вы всегда можете передать конкретные проекты, которые вы хотите построить, в качестве параметров MSBuild.

Командная строка MSBuild будет выглядеть следующим образом:

MSBuild /t:<Project Name>:Rebuild;<Another Project Name>:Rebuild

В TeamCity вы должны поместить <Project Name>:<Target Action> в поле назначения в средстве выполнения MSBuild.

0 голосов
/ 16 мая 2017

Я добавляю системный параметр в Параметры

  • Имя: system.ExcludeFromBuild
  • Вид: Системное свойство (system.)
  • Значение: путь к вашему csproj

parameter pass

...