Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Целевые объекты должны быть упорядочены, если входные данные для одного целевого объекта зависят от выходных данных другого целевого объекта. Эти атрибуты можно использовать для указания порядка выполнения целевых объектов:
. Этот атрибут указывает целевые объекты, которые будут выполняться сначала, даже если целевые объекты указаны в командной строке или в атрибуте .
. Этот атрибут указывает, какие целевые объекты выполняются, если целевой объект не указан явно в командной строке.
. Этот атрибут задает целевые объекты, которые должны выполняться до запуска этого целевого объекта.
и . Эти атрибуты указывают, что этот целевой объект должен выполняться до или после указанных целевых объектов.
Как правило, не стоит полагаться на порядок объявления, чтобы указать, какие задачи выполняются перед другими задачами.
Целевой объект никогда не выполняется дважды во время сборки, даже если последующий целевой объект в сборке зависит от него. После запуска целевого объекта его вклад в сборку завершится.
Цели могут иметь атрибут. Если указанное условие оценивается как ложное, задача не выполняется и считается пропущенной. Сведения о поведении пропущенных целевых объектов см. в разделе «Определение целевого порядка сборки». Дополнительные сведения об условиях см. в разделе "Условия".
Начальные целевые объекты
Атрибут элемента Project указывает целевые объекты, которые будут выполняться сначала, даже если целевые объекты указаны в командной строке или в атрибуте . Начальные целевые объекты обычно используются для проверки ошибок.
Значение атрибута может быть разделенным точкой с запятой, упорядоченным списком целевых объектов. В следующем примере указывается, что сначала выполняется цель , а затем цель .
<Project InitialTargets="Warm;Eject">
Импортированные проекты могут иметь собственные атрибуты. Все начальные целевые объекты агрегируются вместе и выполняются в порядке.
Дополнительные сведения см. в разделе "Практическое руководство. Указание целевого объекта для первой сборки".
Целевые объекты по умолчанию
Атрибут элемента Project указывает, какой целевой объект или целевые объекты создаются, если целевой объект не указан явным образом в командной строке.
Значение атрибута может быть разделенным точкой с запятой, упорядоченным списком целевых объектов по умолчанию. В следующем примере указывается, что сначала выполняется цель , а затем цель .
<Project DefaultTargets="Clean;Build">
Вы можете переопределить целевые объекты по умолчанию с помощью переключателя -target в командной строке. В следующем примере указывается, что сначала выполняется цель , а затем цель . При указании целевых объектов таким образом все целевые объекты по умолчанию игнорируются.
msbuild -target:Build;Report
Если указаны и начальные целевые объекты, и целевые объекты по умолчанию, и если целевые объекты командной строки не указаны, MSBuild сначала запускает начальные целевые объекты, а затем выполняет целевые объекты по умолчанию.
Импортированные проекты могут иметь собственные атрибуты. Первый атрибут, обнаруженный, определяет, какие целевые объекты по умолчанию будут выполняться.
Дополнительные сведения см. в разделе "Практическое руководство. Указание целевого объекта для первой сборки".
Первый целевой объект
Если начальные целевые объекты, целевые объекты по умолчанию или целевые объекты командной строки отсутствуют, MSBuild запускает первый целевой объект, который он встречает в файле проекта или любых импортированных файлах проекта.
Целевые зависимости
Целевые объекты могут описать связи зависимостей друг с другом. Атрибут указывает, что целевой объект зависит от других целевых объектов. Например
<Target Name="Serve" DependsOnTargets="Chop;Cook" />
сообщает MSBuild, что целевой объект зависит от целевого объекта и целевого объекта. MSBuild запускает целевой объект, а затем запускает целевой объект перед запуском целевого объекта.
Замечание
Стандартные целевые объекты в пакете SDK определяют ряд свойств, содержащих список целевых объектов, которые являются зависимостями для этого целевого объекта (например, и т. д.). Например
<Target Name="Build" DependsOnTargets="$(BuildDependsOn)">
Чтобы настроить проект, можно переопределить свойства DependsOn с помощью дополнительных пользовательских целей, расширяющих процесс сборки, как описано в разделе Расширение процесса сборки в Visual Studio.
BeforeTargets и AfterTargets
Вы можете указать порядок назначения с помощью атрибутов и .
Рассмотрим следующий сценарий.
<Project DefaultTargets="Compile;Link">
<Target Name="Compile">
<Message Text="Compiling" />
</Target>
<Target Name="Link">
<Message Text="Linking" />
</Target>
</Project>
Чтобы создать промежуточный целевой объект , который выполняется после целевого объекта, но до целевого объекта, добавьте следующий целевой объект в любом месте элемента.
<Target Name="Optimize" AfterTargets="Compile">
<Message Text="Optimizing" />
</Target>
В качестве альтернативы, укажите порядок как
<Target Name="Optimize" BeforeTargets="Link">
<Message Text="Optimizing" />
</Target>
Не рекомендуется указывать оба объекта и на одном и том же целевом объекте. Как описано в следующем разделе, только первый обнаруженный целевой объект вызовет запуск нового целевого объекта.
Определение целевого порядка сборки
MSBuild определяет порядок целевой сборки следующим образом:
целевые объекты выполняются.
Целевые объекты, указанные в командной строке коммутатором -target , выполняются. Если в командной строке не указаны целевые задачи, то будут выполняться задачи . Если оба отсутствуют, то запускается первая найденная цель.
Атрибут цели оценивается. Если атрибут присутствует и принимает значение, при котором целевой элемент не выполняется, он считается пропущенным.
Другие целевые объекты, которые перечисляют условный целевой объект или по-прежнему выполняются в заданном порядке независимо от результата условия.
Замечание
Пропущенная цель не считается выполненной. Если другой целевой объект позже запросит это, и условие в данный момент оценивается как истинное, то выполнение целевого объекта произойдет в этот момент. Тем не менее, те задачи, которые уже выполнялись для изначально пропущенной цели, не будут выполняться снова.
Перед выполнением или пропуском целевого объекта его целевые объекты выполняются, если атрибут не применяется к целевому объекту и не оценивается .
Замечание
Целевой объект считается пропущенным, если он не выполняется, так как его выходные элементы up-to-date (см. добавочную сборку). Эта проверка выполняется непосредственно перед выполнением задач внутри целевого объекта и не влияет на порядок выполнения целевых объектов.
Перед выполнением или пропуском целевого объекта выполняется любой другой целевой объект, который перечисляет целевой объект в атрибуте .
Перед выполнением целевого объекта сравниваются его атрибут и атрибут. Если MSBuild определяет, что все выходные файлы устарели в отношении соответствующего входного файла или файлов, MSBuild выполняет целевой объект. В противном случае MSBuild пропускает целевой объект.
После выполнения или пропуска целевого объекта любой другой целевой объект, который перечисляет его в атрибуте , запускается.
Связанный контент
- Целевые объекты