Элемент Target (MSBuild)

Содержит набор задач для MSBuild для последовательного выполнения.

<Project><Target>

Синтаксис

<Target Name="Target Name"
        Inputs="Inputs"
        Outputs="Outputs"
        Returns="Returns"
        KeepDuplicateOutputs="true/false"
        BeforeTargets="Targets"
        AfterTargets="Targets"
        DependsOnTargets="DependentTarget"
        Condition="'String A' == 'String B'"
        Label="Label">
    <Task>... </Task>
    <PropertyGroup>... </PropertyGroup>
    <ItemGroup>... </ItemGroup>
    <OnError... />
</Target>

Элементы и атрибуты

В следующих разделах описаны атрибуты, дочерние и родительские элементы.

Атрибуты

Атрибут Description
Name Обязательный атрибут элемента .

Имя целевого объекта. Имя целевого объекта может содержать любой символ, кроме $@()%*?..
Condition Необязательный атрибут элемента .

Проверяемое условие. Если условие принимает значение false, целевой объект не будет выполнять тело целевого объекта или любые целевые объекты, заданные в атрибуте DependsOnTargets. Дополнительные сведения об условиях см. в разделе Условия.
Inputs Необязательный атрибут элемента .

Файлы, образующие входные данные для этого целевого объекта. При указании нескольких файлов они разделяются точкой с запятой. Отметки времени файлов будут сравниваться с отметками времени файлов в Outputs для определения актуальности Target. Дополнительные сведения см. в статьях Добавочные сборки, Практическое руководство. Инкрементная сборка и Преобразования MSBuild.
Outputs Необязательный атрибут элемента .

Файлы, образующие выходные данные для этого целевого объекта. При указании нескольких файлов они разделяются точкой с запятой. Отметки времени файлов будут сравниваться с отметками времени файлов в Inputs для определения актуальности Target. Дополнительные сведения см. в статьях Добавочные сборки, Практическое руководство. Инкрементная сборка и Преобразования MSBuild.
Returns Необязательный атрибут элемента .

Набор элементов, которые будут доступны для задач, вызывающих этот целевой объект, например задач MSBuild. Несколько целевых объектов разделяются точкой с запятой. Если целевые объекты в файле не имеют атрибутов Returns, для этой цели используются атрибуты Outputs.
KeepDuplicateOutputs Дополнительный логический атрибут.

Если указано значение true, в атрибут Returns целевого объекта записывается несколько ссылок на один и тот же элемент. По умолчанию для атрибута устанавливается значение false.
BeforeTargets Необязательный атрибут элемента .

Список имен целевых объектов, разделенных точкой с запятой. Если указан, означает, что этот целевой объект должен выполняться перед указанным целевым объектом или объектами. Это позволяет автору проекта расширять существующий набор целевых объектов, не изменяя их напрямую. Дополнительные сведения см. в разделе Порядок сборки целевых объектов.
AfterTargets Необязательный атрибут элемента .

Список имен целевых объектов, разделенных точкой с запятой. Если указан, означает, что этот целевой объект должен выполняться после указанного целевого объекта или объектов. Это позволяет автору проекта расширять существующий набор целевых объектов, не изменяя их напрямую. Дополнительные сведения см. в разделе Порядок сборки целевых объектов.
DependsOnTargets Необязательный атрибут элемента .

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

Идентификатор, который используется для определения или упорядочения системных и пользовательских элементов.

Дочерние элементы

Элемент Description
Задача Создает и выполняет экземпляр задачи MSBuild. Целевой объект может содержать нуль и более задач.
PropertyGroup Содержит набор определяемых пользователем элементов Property. Начиная с .NET Framework 3.5 элемент Target может содержать элементы PropertyGroup.
ItemGroup Содержит набор определяемых пользователем элементов Item. Начиная с .NET Framework 3.5 элемент Target может содержать элементы ItemGroup. Дополнительные сведения см. в разделе Элементы.
OnError Вызывает один или несколько целевых объектов для выполнения, если атрибут ContinueOnError — ErrorAndStop (или false) для задачи, завершившейся ошибкой. Целевой объект может содержать нуль и более элементов OnError. Если элементы OnError присутствуют, они должны быть последними элементами в элементе Target.

Дополнительные сведения об атрибуте ContinueOnError см. в статье Элемент Task (MSBuild).

Родительские элементы

Элемент Description
Проект Обязательный корневой элемент файла проекта MSBuild.

Замечания

Первый целевой объект для выполнения задается во время выполнения. Целевые объекты могут иметь зависимости от других целевых объектов. Например, целевой объект для развертывания зависит от целевого объекта для компиляции. Обработчик MSBuild выполняет зависимости в том порядке, в котором они появляются в атрибуте DependsOnTargets, слева направо. Дополнительные сведения см. в разделе Целевые объекты.

Поведение MSBuild зависит от порядка импорта, то есть всегда используется последнее обработанное определение целевого объекта с определенным атрибутом Name.

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

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

До выпуска MSBuild 4 атрибут Target возвращал все элементы, которые были заданы в атрибуте Outputs. Для этого MSBuild приходилось записывать эти элементы в случае, если их запрашивали задачи, выполняющиеся позднее в сборке. Так как было невозможно указать, какие целевые объекты имели выходные данные, требуемые вызывающим объектам, MSBuild приходилось накапливать все элементы изо всех объектов Outputs для всех вызываемых объектов Target. Это приводило к проблемам масштабируемости для сборок, имеющих большое количество выходных элементов.

Если пользователь указывает Returns для любого элемента Target в проекте, то только те объекты Target, у которых имеется атрибут Returns, записывают эти элементы.

Объект Target может содержать оба атрибута: Outputs и Returns. Outputs используется с Inputs для определения актуальности целевого объекта. Returns, если присутствует, переопределяет значение Outputs, чтобы определить, какие элементы возвращаются вызывающим объектам. Если Returns не существует, то объекты Outputs будут доступны для вызывающих объектов, за исключением случая, описанного ранее.

До выпуска MSBuild 4, если Target включал несколько ссылок на один и тот же элемент в его объектах Outputs, выполнялась запись этих повторяющихся элементов. В очень больших сборках с большим объемом выходных данных и большим числом взаимозависимостей проекта, это приводило к потреблению большого объема памяти из-за записи ненужных повторяющихся элементов. Если для атрибута KeepDuplicateOutputs задано значение true, дубликаты записываются.

Пример

В следующем примере кода показан элемент Target, выполняющий задачу Csc.

<Target Name="Compile" DependsOnTargets="Resources" Returns="$(TargetPath)">
    <Csc Sources="@(CSFile)"
          TargetType="library"
          Resources="@(CompiledResources)"
          EmitDebugInformation="$(includeDebugInformation)"
          References="@(Reference)"
          DebugType="$(debuggingType)" >
        <Output TaskParameter="OutputAssembly"
                  ItemName="FinalAssemblyName" />
    </Csc>
</Target>

См. также