Задача MSBuild
Обновлен: Ноябрь 2007
Построение проектов MSBuild из другого проекта MSBuild.
Параметры
В следующей таблице описаны параметры задачи MSBuild.
Параметр |
Описание |
---|---|
BuildInParallel |
Необязательный параметр типа Boolean. Если присвоено значение true, построение проектов, указанных в параметре Projects, выполняется параллельно (если это возможно). По умолчанию используется значение true. |
Projects |
Обязательный параметр ITaskItem[]. Задание файлов проекта для построения. |
Properties |
Необязательный параметр типа String. Список пар имен свойств и их значений с разделением точкой с запятой, применяемый к дочернему проекту в качестве глобальных свойств. Если этот параметр задан, от является функционально равнозначным заданию свойств с переключателем /property при построении с помощью MSBuild.exe. Например: Properties="Configuration=Debug;Optimize=$(Optimize)" При передаче свойств проекту через параметр PropertiesMSBuild создает новый экземпляр проекта, даже если файл проекта уже загружен. После создания нового экземпляра проекта MSBuild обрабатывает его как другой проект с другими глобальными свойствами, построение которого может выполняться параллельно с другими экземплярами проекта. Например, построение конфигурации выпуска может выполняться одновременно с построением конфигурации отладки. |
ToolsVersion |
Необязательный параметр типа String. Включение задачи MSBuild для построения проекта, предназначенного для версии .NET Framework, отличной от указанной в данном проекте. Допустимые значения: 2.0, 3.0 и 3.5. По умолчанию используется значение 3.5. |
RebaseOutputs |
Необязательный параметр типа Boolean. Если присвоено значение true, относительные пути целевых выходных элементов из созданных проектов изменяются таким образом, чтобы они соответствовали вызывающему проекту. По умолчанию используется значение false. |
RunEachTargetSeparately |
Необязательный параметр типа Boolean. Если присвоено значение true, задача MSBuild вызывает целевые объекты из списка, переданного в MSBuild, по одному, а не все одновременно. Присвоение этому параметру значения true обеспечивает, что последующие целевые объекты вызываются даже при сбое ранее вызванных целевых объектов. В противном случае ошибка построения препятствует вызову всех последующих целевых объектов. По умолчанию используется значение false. |
StopOnFirstFailure |
Необязательный параметр типа Boolean. Если присвоено значение true, задача в принудительном порядке останавливает построение оставшихся проектов, если один из них может быть неисправен. |
TargetOutputs |
Необязательный выходной параметр ITaskItem[], предназначенный только для чтения. Возвращение выходных данных целевых объектов построения из всех файлов проекта. Возвращаются только указанные выходные данные из целевых объектов, а не все выходные данные, которые могут существовать в целевых объектах или от которых эти объекты зависят. Параметр TargetOutputs также содержит следующие метаданные:
![]()
Если необходимо определить выходные данные раздельно из каждого файла проекта или целевого объекта, запустите задачу MSBuild отдельно для каждого файла проекта или целевого объекта. Если задача MSBuild запускается только один раз для построения всех файлов проекта, выходные данные всех целевых объектов собираются в один массив.
|
Targets |
Необязательный параметр типа String. Указание одного или нескольких целевых объектов для построения в файлах проекта. Для разделения списка имен целевых объектов используется точка с запятой. Если целевые объекты в задаче MSBuild не заданы, в создаваемых файлах проекта указываются целевые объекты по умолчанию. ![]()
Целевые объекты должны входить во все файлы проекта. В противном случае возникает сообщение об ошибке.
|
Заметки
В отличие от использования Задача 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>