Поделиться через


Порядок построения целевого объекта

целевые объекты должны быть расположены в определенном порядке, если входные данных для одного целевого объекта зависят от выходных данных другого. Эти атрибуты можно использовать для определения порядка, в котором выполняются целевые объекты.

  • InitialTargets. Атрибут Project задает целевых объектов, выполняются первыми, даже если целевые объекты, в командной строке или в атрибуте DefaultTargets.

  • DefaultTargets. Это atttribute Project определяет, какие целевые объекты выполняются, если целевой объект не указан явно в командной строке.

  • DependsOnTargets. Атрибут Target определяет целевые объекты, которые необходимо выполнить перед выполнением этот целевой объект может работать.

  • BeforeTargets и AfterTargets. Эти атрибуты Target указывают, что этот целевой объект должен выполняться до или после указанной целевыми объектами (MSBuild 4.0).

целевой объект никогда не выполняется дважды во время построения, даже если от него зависит последующий целевой объект в построении. После выполнения целевого объекта его функция в построении считается выполненной.

целевые объекты могут иметь атрибут Condition. Если указанное условие принимает значение false, то не выполняется и не содержит целевой объект не влияет на построение. Дополнительные сведения об условиях см. в разделе Условия MSBuild.

Начальные целевые объекты

Атрибут InitialTargets элемента Проект определяет целевых объектов, выполняются первыми, даже если целевые объекты, в командной строке или в атрибуте DefaultTargets. Начальные целевые объекты в основном используются для проверки на наличие ошибок.

Значение атрибута InitialTargets может быть создаваемых точку с запятой размежевано, упорядоченный список целевых объектов. В следующем примере указывается, что целевой объект Warm выполняется, а затем целевой объект Eject.

<Project InitialTargets="Warm;Eject" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">

В импортированных проектах могут быть свои атрибуты InitialTargets. Все начальные целевые объекты агрегируются и выполняются по очереди.

Дополнительные сведения см. в разделе Практическое руководство. Выбор цели для первого построения.

целевые объекты по умолчанию

Атрибут DefaultTargets элемента Проект определяет, целевой объект или целевые объекты, если целевой объект не указан явно в командной строке.

Значение атрибута DefaultTargets может быть создаваемых точку с запятой размежевано, упорядоченный список целевых объектов по умолчанию. В следующем примере указывается, что целевой объект Clean выполняется, а затем целевой объект Build.

<Project DefaultTargets="Clean;Build" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">

Можно переопределить целевые объекты по умолчанию с помощью ключа /target в командной строке. В следующем примере указывается, что целевой объект Build выполняется, а затем целевой объект Report. При определении целевых объектов таким образом, все целевые объекты по умолчанию игнорируются.

msbuild /target:Build;Report

Если и начальные целевые объекты и целевые объекты по умолчанию, и если целевые объекты командной строки, MSBuild сначала выполняет начальные целевые объекты, а затем целевые объекты по умолчанию.

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

Дополнительные сведения см. в разделе Практическое руководство. Выбор цели для первого построения.

Первый целевой объект

Если начальные целевые объекты и целевые объекты по умолчанию не указаны, и если не заданы целевые объекты командной строки, MSBuild сначала выполняет первый целевой объект, обнаруженный в файле проекта или любых импортированных файлах проекта.

Зависимости целевых объектов

целевые объекты могут описывать отношения зависимости друг от друга. Атрибут DependsOnTargets указывает, что целевой объект зависит от других таких объектов. Например:

<Target Name="Serve" DependsOnTargets="Chop;Cook" />

сообщает MSBuild, что целевой объект Serve зависит от целевых объектов Chop и целевом объекте Cook. MSBuild выполняет целевой объект Chop, а затем выполнять целевой объект Cook, прежде чем выполнять целевой объект Serve.

Перед целевыми объектами и после целевых объектов

В MSBuild 4.0 можно задать порядок целевых объектов с помощью атрибутов BeforeTargets и AfterTargets.

Рассмотрим следующий скрипт:

<Project DefaultTargets="Compile;Link" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="Compile">
        <Message Text="Compiling" />
    </Target>
    <Target Name="Link">
        <Message Text="Linking" />
    </Target>
</Project>

Для создания целевой объект Optimize промежуточных, выполняется после целевого объекта Compile, но перед целевым объектом Link добавьте следующий целевой объект в любом элементе Project.

    <Target Name="Optimize" 
        AfterTargets="Compile" BeforeTargets="Link">
        <Message Text="Optimizing" />
    </Target>

Определение порядка построения целевых объектов

MSBuild определяет порядок построения целевых объектов следующим образом:

  1. объекты InitialTargets.

  2. Выполняются целевые объекты, заданные в командной строке с параметром /target. Если не указать целевые объекты в командной строке, объекты DefaultTargets. Если ни одно имеется, то первый обнаруженный целевой объект.

  3. Выполняется оценка атрибута Condition целевого объекта. Если атрибут Condition присутствует и равен false, то не выполняется и не содержит целевой объект дальнейшая выдача влияет на построение.

  4. Перед выполнением целевого объекта выполняются его объекты DependsOnTargets.

  5. Перед выполнением целевого объекта сначала выполняется любой целевой объект, указанный в атрибуте BeforeTargets.

  6. Перед выполнением целевого объекта сравниваются его атрибуты Inputs и Outputs. Если MSBuild определяет, что все выходные файлы неактуальны по отношению к соответствующему входному файлу или файлам, MSBuild выполняет целевой объект. В противном случае MSBuild пропускает целевой объект.

  7. После выполнения или пропуска выполняется любой целевой объект, указанный в атрибуте AfterTargets.

См. также

Основные понятия

Цели MSBuild