Подтвердить что ты не робот

Msbuild распознает любые конфигурации сборки, отличные от DEBUG | RELEASE

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

  • Откройте меню "Инструменты: параметры", перейдите в раздел "Проекты и решения: общий" и установите флажок Показать расширенные конфигурации сборки.
  • Оттуда перейдите в меню "Сборка: Configuration Manager"
  • В появившемся диалоговом окне нажмите раскрывающееся меню "Active solution" и нажмите < New... > , чтобы создать новую конфигурацию сборки.

Ответ 3

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

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

Ответ 4

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

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