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. Если да, то в чем смысл создания разных конфигураций сборки?
Ответы
Ответ 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... > , чтобы создать новую конфигурацию сборки.
Ответ 2
Конечно, у вас может быть столько пользовательских конфигураций сборки, которые вы хотите определить. См. Этот связанный вопрос о том, как может выглядеть установка.
Как условно развернуть app.config на основе конфигурации сборки?
Ответ 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>