Распознает ли Msbuild какие-либо конфигурации сборки, кроме DEBUG | RELEASE - PullRequest
21 голосов
/ 03 марта 2009

Я создал конфигурацию с именем Test через Visual Studio, которая в настоящее время просто принимает все настройки DEBUG, однако я использую условия компилятора для определения некоторых конкретных действий, если сборка оказывается TEST | DEBUG | RELEASE.

Однако как мне получить скрипт MSBUILD для определения конфигурации TEST ??

В настоящее время я строю

 <MSBuild Projects="@(SolutionsToBuild)" Properties="Configuration=$(Configuration);OutDir=$(BuildDir)\Builds\" />

Где @ (SolutionsToBuild) - мое решение. В Общих свойствах проекта MsBuild указано, что $ (Configuration) является общим свойством, но всегда отображается пустым?

Означает ли это, что он никогда не устанавливается, а просто зарезервирован для моего использования или что он может ТОЛЬКО обнаруживать DEBUG | RELEASE. Если да, какой смысл разрешать создание различных конфигураций сборки?

Ответы [ 4 ]

42 голосов
/ 03 марта 2009

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

msbuild /v:n /p:Configuration=Release "Capture.sln" 
msbuild /v:n /p:Configuration=ReleaseNoUploads "Capture.sln" 

Я определил конфигурацию ReleaseNoUploads внутри Visual Studio.

Вот что я должен был сделать для этого (это Visual Studio 2005):

  • Откройте меню Инструменты: параметры , перейдите к параметру Проекты и решения: общие и установите флажок Показать расширенные конфигурации сборки .
  • Оттуда перейдите в Сборка: Конфигурация Менеджер меню
  • В появившемся диалоговом окне нажмите Активная конфигурация решения раскрывающийся список и нажмите , чтобы создать новую конфигурацию сборки.
5 голосов
/ 03 марта 2009

Конечно, вы можете иметь столько пользовательских конфигураций сборки, сколько захотите определить. См. Этот связанный вопрос о том, как может выглядеть установка.

Как условно развернуть app.config на основе конфигурации сборки?

2 голосов
/ 02 января 2011

Обычно то, что я делаю для выпуска и отладки обеих сборок из одного скрипта MSBuild:

<PropertyGroup Condition="'$(Configuration)'==''">
  <Configuration>Debug;Release</Configuration>
</PropertyGroup>

Затем добавьте этот секретный соус MSBuild:

   <Target Name="configurations">
     <CreateItem Include="$(Configuration)">
       <Output TaskParameter="Include" ItemName="Configuration" />
     </CreateItem>
   </Target>

А затем для каждой цели сделайте что-то вроде этого:

  <Target Name="Compile" DependsOnTargets="configurations" Inputs="@(Configuration)" Outputs="target\%(Configuration.FileName)">
    <MSBuild Projects="@(MyProjects)" Targets="Build" Properties="Configuration=%(Configuration.Identity);WarningLevel=1" />
  </Target>
2 голосов
/ 03 марта 2009

Обратите внимание, что, когда «внутри visual studio», $ (Configuration) и $ (Platform) всегда устанавливаются VS с использованием содержимого Configuration Manager в раскрывающихся списках вверху. Принимая во внимание, что если вы хотите установить эти значения, используя msbuild из командной строки, вы должны передать значения явно (как в ответе @ MarkBiek).

(Большинство шаблонов проектов VS будут «использовать по умолчанию» значение для Configuration / Platform, так что вы можете использовать командную строку MSBuild без явного указания этих значений. Это хорошо, но эти два полезных / общих свойства отображаются как немного более волшебным / странным, чем они есть на самом деле.)

...