Цели MSBuild
Целевые объекты позволяют группировать задачи в определенном порядке и разделять процесс построения на более мелкие части.Например, один целевой объект может удалить все файлы в выходном каталоге для подготовки к построению, тогда как другой целевой объект компилирует входные данные для проекта и помещает их в пустой каталог.Дополнительные сведения о задачах см. в разделе Задачи MSBuild.
Объявление целевых объектов в файле проекта
Целевые объекты указываются в файле проекта с помощью элемента Target.Например, с помощью следующего кода XML создается целевой объект с именем Construct, который затем вызывает задачу Csc с типом элемента Compile.
<Target Name="Construct">
<Csc Sources="@(Compile)" />
</Target>
Целевые объекты, также как и свойства MSBuild, можно переопределять.Например:
<Target Name="AfterBuild" >
<Message Text="First occurrence" />
</Target>
<Target Name="AfterBuild" >
<Message Text="Second occurrence" />
</Target>
После выполнения AfterBuild отобразится сообщение "Второе вхождение".
Порядок построения целевого объекта
целевые объекты должны быть расположены в определенном порядке, если входные данных для одного целевого объекта зависят от выходных данных другого.Существует несколько способов задания порядка выполнения целевых объектов.
Начальные целевые объекты
целевые объекты по умолчанию
Первый целевой объект
Зависимости целевых объектов
BeforeTargets и AfterTargets (MSBuild 4.0)
Целевой объект никогда не выполняется дважды во время построения, даже если от него зависит последующий целевой объект в построении.После выполнения целевого объекта его функция в построении считается выполненной.
Дополнительные сведения о порядке построения целевых объектов см. в разделе Порядок построения целевого объекта.
Пакетная обработка целевых объектов
Целевой элемент может иметь атрибут Outputs, который указывает метаданные в формате %(Metadata).В этом случае MSBuild запускает целевой объект один раз для каждого уникального значения метаданных, группируя элементы (пакетная обработка), имеющие значения метаданных.Например:
<ItemGroup>
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="Microsoft.CSharp">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
</ItemGroup>
<Target Name="AfterBuild"
Outputs="%(Reference.RequiredTargetFramework)">
<Message Text="Reference:
@(Reference->'%(RequiredTargetFramework)')" />
</Target>
Пакеты ссылаются на элементы по их метаданным RequiredTargetFramework.Выходные данных целевого объекта могут выглядеть следующим образом:
Reference: 3.5;3.5
Reference: 4.0
При реальных построениях пакетная обработка целевых объектов используется редко.Как правило, используется пакетная обработка задач.Дополнительные сведения см. в разделе Пакетная обработка в MSBuild.
Инкрементные построения
Инкрементные построения представляют собой построения, оптимизированные таким образом, что целевые объекты с выходными файлами, актуальными в отношении соответствующих входных файлов, не выполняются.Целевой объект может иметь как атрибут Inputs, указывающий, какие элементы целевой объект должен ожидать в качестве входных, так и атрибут Outputs, указывающий, какие элементы создаются на выходе.
Если все выходные элементы актуальны, MSBuild пропускает целевой объект, что позволяет существенно увеличить скорость построения.Это называется инкрементным построением целевого объекта.Если актуально только несколько файлов, MSBuild выполняет целевой объект, но пропускает актуальные элементы.Это называется частичным инкрементным построением целевого объекта.Дополнительные сведения см. в разделе Инкрементные построения.
См. также
Задачи
Как использовать одинаковый целевой объект в нескольких файлах проектов