Задача MSBuild
Создает проекты MSBuild из другого проекта MSBuild.
Параметры
В следующей таблице описаны параметры задачи MSBuild
.
Параметр | Описание |
---|---|
BuildInParallel |
Необязательный параметр Boolean .Если true , проекты, указанные в параметре Projects , создаются параллельно, если это возможно. По умолчанию — false . |
Projects |
Обязательный параметр ITaskItem[] .Указывает файлы проекта для сборки. |
Properties |
Необязательный параметр String .Список пар "имя-значение", разделенный точкой с запятой, который применяется в качестве глобальных свойств к дочернему проекту. При указании этого параметра он функционально эквивалентен настройке свойств, имеющих параметр -property при сборке с помощью MSBuild.exe. Рассмотрим пример. Properties="Configuration=Debug;Optimize=$(Optimize)" При передаче свойств в проект через параметр Properties MSBuild может создать новый экземпляр проекта, даже если файл проекта уже загружен. MSBuild создает один экземпляр проекта для заданного пути проекта и уникального набора глобальных свойств. Например, это поведение позволяет создавать несколько задач MSBuild, которые вызывают myproject.proj, с Configuration=Release и вы получаете один экземпляр myproject.proj (если уникальные свойства не указаны в задаче). Если указать свойство, которое еще не было видно MSBuild, MSBuild создает новый экземпляр проекта, который можно создать параллельно с другими экземплярами проекта. Например, конфигурация выпуска может создаваться одновременно с конфигурацией отладки. |
RebaseOutputs |
Необязательный параметр Boolean .Если true , относительные пути целевых выходных элементов из встроенных проектов корректируются относительно вызывающего проекта. По умолчанию — false . |
RemoveProperties |
Необязательный параметр String .Указывает набор глобальных свойств для удаления. |
RunEachTargetSeparately |
Необязательный параметр Boolean .Если true , задача MSBuild вызывает каждый целевой объект в списке, переданный в MSBuild одновременно, а не одновременно. Установка этого параметра на true гарантирует, что последующие целевые объекты вызываются, даже если ранее вызываемые целевые объекты завершилось сбоем. В противном случае ошибка сборки остановит вызов всех последующих целевых объектов. По умолчанию — false . |
SkipNonexistentProjects |
Необязательный параметр Boolean .Если true , файлы проекта, которые не существуют на диске, пропускаются. В противном случае такие проекты вызывают ошибку. По умолчанию — false . |
SkipNonexistentTargets |
Необязательный параметр Boolean .Если true , файлы проекта, которые существуют, но не содержат именованные Targets , пропускаются. В противном случае такие проекты вызывают ошибку. По умолчанию — false . Представлено в MSBuild 15.5. |
StopOnFirstFailure |
Необязательный параметр Boolean .Если true , когда один из проектов не удается построить, больше не создаются проекты. В настоящее время этот параметр не поддерживается при параллельном создании (с несколькими процессорами). |
TargetAndPropertyListSeparators |
Необязательный параметр String[] .Задает список целевых объектов и свойств в виде метаданных элемента Project ). Разделители не отображаются перед обработкой. Например, %3B (экранированный ";") рассматривается как если бы это было неискаченным ";". |
TargetOutputs |
Необязательный ITaskItem[] выходной параметр только для чтения.Возвращает выходные данные встроенных целевых объектов из всех файлов проекта. Возвращаются только выходные данные из указанных целевых объектов, а не выходные данные, которые могут существовать на целевых объектах, от которых зависят эти целевые объекты. Параметр TargetOutputs также содержит следующие метаданные:- MSBuildSourceProjectFile : файл проекта MSBuild, содержащий целевой объект, который задает выходные данные.- MSBuildSourceTargetName : целевой объект, задающий выходные данные.
Примечание. Если вы хотите определить выходные данные из каждого файла проекта или целевого объекта отдельно, выполните задачу MSBuild отдельно для каждого файла проекта или целевого объекта. Если выполнить задачу MSBuild только один раз для сборки всех файлов проекта, выходные данные всех целевых объектов собираются в один массив. |
Targets |
Необязательный параметр String .Указывает целевой объект или целевые объекты для сборки в файлах проекта. Используйте точку с запятой для разделения списка целевых имен. Если целевые объекты не указаны в задаче MSBuild , то целевые объекты по умолчанию, указанные в файлах проекта, создаются.
Примечание. целевые объекты должны выполняться во всех файлах проекта. В противном случае возникает ошибка сборки. |
ToolsVersion |
Необязательный параметр String .Указывает ToolsVersion , используемый при создании проектов, переданных этой задаче.Позволяет задаче MSBuild создать проект, предназначенный для другой версии платформы .NET Framework, отличной от указанной в проекте. Допустимые значения: 2.0 , 3.0 и 3.5 . Значение по умолчанию — 3.5 . |
Замечания
Помимо параметров, перечисленных ранее, эта задача наследует параметры из класса TaskExtension, который сам наследует от класса Task. Список этих дополнительных параметров и их описания см. в разделе базовый класс TaskExtension.
В отличие от использования задачи exec для запуска MSBuild.exe, эта задача использует тот же процесс MSBuild для создания дочерних проектов. Список уже созданных целевых объектов, которые можно пропустить, предоставляется совместно между родительскими и дочерними сборками. Эта задача также быстрее, так как новый процесс MSBuild не создается.
Эта задача может обрабатывать не только файлы проекта, но и файлы решения. В MSBuild 17.12 и более поздних версиях принимаются форматы файлов решения .slnx
и .sln
.
Любая конфигурация, требуемая MSBuild для создания проектов одновременно, даже если конфигурация включает удаленную инфраструктуру (например, порты, протоколы, время ожидания, повторные попытки и т. д.), необходимо настроить с помощью файла конфигурации. По возможности элементы конфигурации должны быть указаны в качестве параметров задачи в MSBuild
задаче.
Начиная с MSBuild 3.5, проекты решений теперь поверхность TargetOutputs из всех вложенных проектов, которые он создает.
Передача свойств в проекты
В версиях MSBuild до MSBuild 3.5 передача различных наборов свойств в различные проекты, перечисленные в элементе MSBuild, была сложной задачей. Если вы использовали атрибут Properties задачи MSBuild , то его параметр был применен ко всем проектам, созданным, если только вы не пакетировали задачу MSBuild и условно предоставили различные свойства для каждого проекта в списке элементов.
Однако MSBuild 3.5 предоставляет два новых зарезервированных элемента метаданных, свойства и дополнительныеproperties, которые предоставляют гибкий способ передачи различных свойств для различных проектов, создаваемых с помощью задачи MSBuild .
Примечание.
Эти новые элементы метаданных применимы только к элементам, переданным в атрибуте Projects задачи MSBuild.
Преимущества сборки с несколькими процессорами
Одним из основных преимуществ использования этих новых метаданных является параллельное создание проектов в многопроцессорной системе. Метаданные позволяют консолидировать все проекты в одну задачу MSBuild вызов без выполнения пакетной или условной задачи MSBuild. При вызове только одной задачи MSBuildвсе проекты, перечисленные в атрибуте Projects, создаются параллельно. (Однако, если атрибут BuildInParallel=true
присутствует в задаче MSBuild.) Дополнительные сведения см. в статье Создание нескольких проектов параллельно.
Метаданные свойств
При указании метаданные свойств переопределяет параметр свойств задачи, а дополнительные атрибуты метаданные добавляются к определениям параметра.
Распространенный сценарий заключается в создании нескольких файлов решения с помощью задачи MSBuild, используя только разные конфигурации сборки. Вы можете создать решение a1 с помощью конфигурации отладки и решения a2 с помощью конфигурации выпуска. В MSBuild 2.0 этот файл проекта будет выглядеть следующим образом:
Примечание.
В следующем примере "..." представляет дополнительные файлы решения.
a.proj
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build">
<MSBuild Projects="a1.sln..." Properties="Configuration=Debug"/>
<MSBuild Projects="a2.sln" Properties="Configuration=Release"/>
</Target>
</Project>
Однако с помощью метаданных свойств можно упростить этот код для использования одной задачи MSBuild, как показано в следующем примере:
a.proj
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectToBuild Include="a1.sln...">
<Properties>Configuration=Debug</Properties>
</ProjectToBuild>
<ProjectToBuild Include="a2.sln">
<Properties>Configuration=Release</Properties>
</ProjectToBuild>
</ItemGroup>
<Target Name="Build">
<MSBuild Projects="@(ProjectToBuild)"/>
</Target>
</Project>
-или-
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectToBuild Include="a1.sln..."/>
<ProjectToBuild Include="a2.sln">
<Properties>Configuration=Release</Properties>
</ProjectToBuild>
</ItemGroup>
<Target Name="Build">
<MSBuild Projects="@(ProjectToBuild)"
Properties="Configuration=Debug"/>
</Target>
</Project>
Дополнительные метаданныеProperties
Рассмотрим следующий сценарий, в котором вы создаете два файла решения с помощью задачи MSBuild, как с помощью конфигурации выпуска, так и с использованием архитектуры x86 и другой с помощью архитектуры ia64. В MSBuild 2.0 необходимо создать несколько экземпляров задачи MSBuild: один для сборки проекта с помощью конфигурации выпуска с архитектурой x86, другой с помощью конфигурации выпуска с архитектурой выпуска с архитектурой ia64. Файл проекта будет выглядеть следующим образом:
a.proj
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build">
<MSBuild Projects="a1.sln..." Properties="Configuration=Release;
Architecture=x86"/>
<MSBuild Projects="a2.sln" Properties="Configuration=Release;
Architecture=ia64"/>
</Target>
</Project>
С помощью метаданных AdditionalProperties можно упростить использование одной задачи MSBuild с помощью следующего:
a.proj
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectToBuild Include="a1.sln...">
<AdditionalProperties>Architecture=x86
</AdditionalProperties>
</ProjectToBuild>
<ProjectToBuild Include="a2.sln">
<AdditionalProperties>Architecture=ia64
</AdditionalProperties>
</ProjectToBuild>
</ItemGroup>
<Target Name="Build">
<MSBuild Projects="@(ProjectToBuild)"
Properties="Configuration=Release"/>
</Target>
</Project>
Пример
В следующем примере используется задача MSBuild
для создания проектов, указанных коллекцией элементов ProjectReferences
. Полученные целевые выходные данные хранятся в коллекции элементов AssembliesBuiltByChildProjects
.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectReferences Include="*.*proj" />
</ItemGroup>
<Target Name="BuildOtherProjects">
<MSBuild
Projects="@(ProjectReferences)"
Targets="Build">
<Output
TaskParameter="TargetOutputs"
ItemName="AssembliesBuiltByChildProjects" />
</MSBuild>
</Target>
</Project>
См. также
- задачи
- Справочник по задачам