Задача MSBuild
Построение проектов MSBuild из другого проекта MSBuild.
Параметры
В следующей таблице описаны параметры задачи MSBuild.
Параметр |
Описание |
---|---|
BuildInParallel |
Необязательный параметр типа Boolean. Если присвоено значение true, построение проектов, указанных в параметре Projects, выполняется параллельно (если это возможно). По умолчанию используется значение false. |
Projects |
Обязательный параметр ITaskItem[]. Задание файлов проекта для построения. |
Properties |
Необязательный параметр типа String. Список пар имен "имя-значение" свойства, разделенных точкой с запятой, которые применяются к дочернему проекту в качестве глобальных свойств. Если этот параметр задан, от является функционально равнозначным заданию свойств с переключателем /property при построении с помощью MSBuild.exe. Примеры. Properties="Configuration=Debug;Optimize=$(Optimize)" При передаче свойств проекту через параметр Properties MSBuild создает новый экземпляр проекта, даже если файл проекта уже загружен. После создания нового экземпляра проекта MSBuild обрабатывает его как другой проект с другими глобальными свойствами, построение которого может выполняться параллельно с другими экземплярами проекта. Например, построение конфигурации выпуска может выполняться одновременно с построением конфигурации отладки. |
RebaseOutputs |
Необязательный параметр типа Boolean. Если присвоено значение true, относительные пути целевых выходных элементов из созданных проектов изменяются таким образом, чтобы они соответствовали вызывающему проекту. По умолчанию используется значение false. |
RemoveProperties |
Необязательный параметр типа String. Задает набор глобальных свойств, которые необходимо удалить. |
RunEachTargetSeparately |
Необязательный параметр типа Boolean. Если присвоено значение true, задача MSBuild вызывает целевые объекты из списка, переданного в MSBuild, по одному, а не все одновременно. Присвоение этому параметру значения true обеспечивает, что последующие целевые объекты вызываются даже при сбое ранее вызванных целевых объектов. В противном случае ошибка построения препятствует вызову всех последующих целевых объектов. По умолчанию используется значение false. |
SkipNonexistentProjects |
Необязательный параметр типа Boolean. Если значение true, отсутствующие на диске файлы проекта будут пропущены. В противном случае такие проекты приведет к ошибке. |
StopOnFirstFailure |
Необязательный параметр типа Boolean. Если значение — true, то при ошибке построения одного из проектов построение других проектов не выполняется. В настоящее время при параллельном построении (с несколькими процессорами) это не поддерживается. |
TargetAndPropertyListSeparators |
Необязательный параметр типа String[]. Определяет список целевых объектов и свойств как Project. Разделители будут корректно учтены до обработки. Например: %3B (";" в escape-версии) будет рассматриваться как будто это ";". |
TargetOutputs |
Необязательный выходной параметр ITaskItem[], предназначенный только для чтения. Возвращает выходные данные целевых объектов построения из всех файлов проекта. Возвращаются только указанные выходные данные из целевых объектов, а не все выходные данные, которые могут существовать в целевых объектах или от которых эти объекты зависят. Параметр TargetOutputs также содержит следующие метаданные:
Примечание
Если необходимо определить выходные данные раздельно из каждого файла проекта или целевого объекта, запустите задачу MSBuild отдельно для каждого файла проекта или целевого объекта.Если задача MSBuild запускается только один раз для построения всех файлов проекта, выходные данные всех целевых объектов собираются в один массив.
|
Targets |
Необязательный параметр типа String. Указание одного или нескольких целевых объектов для построения в файлах проекта. Для разделения списка имен целевых объектов используется точка с запятой. Если целевые объекты в задаче MSBuild не заданы, в создаваемых файлах проекта указываются целевые объекты по умолчанию.
Примечание
Целевые объекты должны входить во все файлы проекта.В противном случае возникает сообщение об ошибке.
|
ToolsVersion |
Необязательный параметр типа String. Указывает ToolsVersion для использования при построении проектов, переданных этой задаче. Включает задачу MSBuild для построения проекта, предназначенного для версии .NET Framework, отличной от указанной в данном проекте. Допустимые значения: 2.0, 3.0 и 3.5. Значение по умолчанию – 3.5. |
UnloadProjectsOnCompletion |
Необязательный параметр типа Boolean. Если значение true, после завершения операции проект будет выгружен. |
UseResultsCache |
Необязательный параметр типа Boolean. Если true, то кэшированный результат возвращается, если существует. Если theMSBuild задача выполняется, ее результат будет кэширован в области (ProjectFileName, GlobalProperties) [TargetNames] в виде списка элементов построения |
Заметки
Помимо параметров, которые перечислены выше, эта задача наследует параметры от класса TaskExtension, который наследует от класса Task. Чтобы получить список этих доп параметров и их описаний, см. Базовый класс TaskExtension.
В отличие от использования Задача Exec для запуска MSBuild.exe эта задача использует тот же процесс MSBuild для построения дочерних проектов. Список построенных целевых объектов, которые могут быть пропущены, используется совместно родительскими и дочерними сборками. Эта задача выполняется быстрее, так как не создается новый процесс MSBuild.
Эта задача может обрабатывать не только файлы проекта, но и файлы решений.
Любая конфигурация, которая требуется MSBuild для одновременного построения проектов, даже если конфигурация включает в себя удаленную инфраструктуру (например порты, протоколы, тайм-ауты, повторные попытки и так далее), должна быть сделана настраиваемой с помощью файла конфигурации. Желательно наличие возможности задания элементов конфигурации как параметров задачи в задаче MSBuild.
Начиная с MSBuild версии 3.5, проекты решений получают значение TargetOutputs из всех создаваемых подпроектов.
Передача свойств в проекты
В версиях MSBuild, предшествующих MSBuild 3.5, передача различных наборов свойств в разные проекты, указанные в элементе MSBuild, была затруднена. При использовании атрибута Properties Задача MSBuild его настройки применялись ко всем создаваемым проектам, если только задача Задача MSBuild не выполнялась в пакетном режиме, а для каждого проекта в списке этого элемента не были заданы различные свойства.
Однако в MSBuild 3.5 представлены два новых зарезервированных элемента метаданных — Properties и AdditionalProperties, которые предоставляют гибкий способ передачи различных свойств в разные создаваемые проекты с помощью Задача MSBuild.
Примечание |
---|
Эти новые элементы метаданных применяются только к элементам, переданным в атрибут Projects задачи Задача MSBuild. |
Преимущества многопроцессорного построения
Одно из главных преимуществ использования новых метаданных проявляется при параллельном построении проектов на многопроцессорной системе. Эти метаданные позволяют консолидировать все проекты в один вызов Задача MSBuild без выполнения задач пакетной или условной обработки MSBuild. При вызове одной задачи Задача MSBuild выполняется параллельное построение всех проектов, перечисленных в атрибуте Projects. (Однако это будет выполнено только в том случае, если в Задача MSBuild присутствует атрибут BuildInParallel=true.) Дополнительные сведения см. в разделе Построение для нескольких процессоров.
Метаданные Properties
Обычный сценарий заключается в построении нескольких файлов решений с помощью Задача MSBuild, но с использованием различных конфигураций сборки. Можно построить решение a1 с помощью конфигурации отладки, а решение a2 — с помощью конфигурации выпуска. В MSBuild 2.0 этот файл проекта принял бы следующий вид:
Примечание |
---|
В приведенном ниже примере "…" обозначает дополнительные файлы решений. |
a.proj
<Project xmlns="https://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>
С помощью метаданных Properties можно упростить этот код, используя одну задачу Задача MSBuild, как показано ниже:
a.proj
<Project xmlns="https://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="https://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>
Метаданные AdditionalProperties
Рассмотрим следующий сценарий, в котором построение двух файлов решений выполняется с помощью Задача MSBuild; для обоих файлов используется конфигурация выпуска, но для одного используется архитектура x86, а для другого — архитектура ia64. В MSBuild 2.0 потребовалось бы создать несколько экземпляров Задача MSBuild: один для построения проекта с помощью конфигурации выпуска с архитектурой x86, а другой для построения проекта с помощью конфигурации выпуска с архитектурой ia64. Файл проекта принял бы следующий вид:
a.proj
<Project xmlns="https://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="https://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="https://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>
См. также
Основные понятия
Другие ресурсы
Справочные сведения о задачах MSBuild
Журнал изменений
Дата |
Журнал |
Причина |
---|---|---|
Июнь 2010 |
Измените значение по умолчанию BuildInParallel на true. |
Исправление ошибки содержимого. |