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

MSBuild: указание цели из командной строки

У меня есть задача MSBuild для создания конкретного проекта в файле решения. Это выглядит примерно так:

<Target Name="Baz">
  <MSBuild Projects="Foo.sln" Targets="bar:$(BuildCmd)" />
</Target>

В командной строке я могу установить BuildCmd как Rebuild или Clean, и работает как ожидалось:

msbuild/target: Baz/свойство: BuildCmd = Rebuild MyMsbuildFile.xml msbuild/target: Baz/свойство: BuildCmd = Очистить MyMsbuildFile.xml

Но какое слово я использую для установки BuildCmd, чтобы просто построить? Я пробовал Build и Compile и просто оставил его пустым или undefined, но всегда получаю сообщение об ошибке.

msbuild/target: Baz/свойство: BuildCmd = Build MyMsbuildFile.xml Foo.sln: ошибка MSB4057: целевой проект "bar: Build" не существует в проекте.

msbuild/target: Baz/свойство: BuildCmd = Скомпилировать MyMsbuildFile.xml Foo.sln: ошибка MSB4057: целевой проект "bar: Compile" не существует в проекте.

msbuild/target: Baz MyMsbuildFile.xml Foo.sln: ошибка MSB4057: целевой проект "bar:" не существует в проекте.

4b9b3361

Ответ 1

Я понял, что вы хотите создать цель с помощью определенной команды: Build, Clean и т.д.

Вот как я это сделаю.

Создайте свойство для получения команды сборки, если не указано значение по умолчанию для сборки

<PropertyGroup>
  <BuildCmd Condition=" '$(BuildCmd)' == ''">Build</BuildCmd>
</PropertyGroup>

Затем создайте цель, которая запустит MSBuild с указанной целью в параметре:

<Target Name="Stackoverflow">
  <MsBuild Projects="Foo.sln" Targets="$(BuildCmd)" />
</Target>

Затем вызовите файл MSBuild с параметром target и BuildCmd следующим образом:

msbuild msbuild.xml /t:Stackoverflow /p:BuildCmd=Clean

Просто убедитесь, что цель существует в файле решения или проекта.

Ответ 2

От: http://msdn.microsoft.com/en-us/library/ms164311.aspx

/целевые: цели

Создает эти цели в этом проекте. Используйте точку с запятой или запятую для разделения нескольких целей или укажите каждую цель отдельно. /t также приемлемо. Например: /Целевые: ресурсы; Compile

Ответ 3

Ключ является условным свойством BuildCmd.

 <Target Name="Baz">
   <PropertyGroup>
     <BuildCmd Condition="'$(BuildCmd)' != ''">:$(BuildCmd)</BuildCmd>
   </PropertyGroup>
   <MSBuild Projects="Foo.sln" Targets="bar$(BuildCmd)" />
 </Target>

Таким образом, если установлены "Очистить" или "Восстановить", добавляется двоеточие. Если ничего не добавлено, BuildCmd будет просто пустым, по умолчанию для цели сборки.

Примечание. Группа свойств должна находиться в целевом объекте или она будет переопределена, если вы укажете ее в командной строке.

Ответ 4

Используя шаблон CheGueVerra, я придумал следующее решение:

<PropertyGroup>
    <ProjBuildCmd Condition="'$(BuildCmd)' != 'Build'">:$(BuildCmd)</ProjBuildCmd>
    <SolnBuildCmd Condition="'$(BuildCmd)' != 'Build'">$(BuildCmd)</SolnBuildCmd>
</PropertyGroup>

А затем вместо прямого использования $(BuildCmd) я использую $(ProjBuildCmd) или $(SolnBuildCmd) следующим образом:

<!-- Build the 'bar' project only -->
<Target Name="Baz">
  <MSBuild Projects="Foo.sln" Targets="bar$(ProjBuildCmd)" />
</Target>

<!-- Build the whole solution -->
<Target Name="Baz2">
  <MSBuild Projects="Foo.sln" Targets="$(SolnBuildCmd)" />
</Target>

Ответ 5

Просто отредактируйте файл sln самостоятельно и узнайте - MSBuild - это простой простой синтаксис, просто найдите цели.