Новые методы для управления элементами и свойствами (MSBuild)

Обновлен: Ноябрь 2007

Начиная с версии MSBuild 3.5 можно сделать следующее:

  • Задайте группу определения элементов, которая будет содержать метаданные, применимые ко всем элементам проекта.

  • Непосредственно в группе элементов можно динамически создавать, удалять, комбинировать или изменять свойства, элементы и метаданные элементов. Это можно делать вместо использования задачи CreateItem и задачи CreateProperty.

Группы определения элементов

Элемент ItemDefinitionGroup дает возможность определить набор определений элементов, которые являются значениями метаданных и по умолчанию применимы ко всем элементам в проекте. Дополнительные сведения см. в разделе Определения элементов.

Группа элементов допускает динамическую настройку метаданных.

MSBuild использует Элемент ItemGroup (MSBuild) и Элемент PropertyGroup (MSBuild) для объявления статических элементов и свойств. Если в MSBuild 2.0 нужно было создать или изменить свойства или элементы во время построения, приходилось использовать Задача CreateItem или Задача CreateProperty. Этот процесс достаточно утомительный и не слишком хорошо поддерживает динамические обновления. Однако MSBuild 3.5 дает возможность динамически создавать, удалять, комбинировать или изменять свойства, элементы и метаданные элементов непосредственно в группе элементов.

Сравните следующие примеры. В примере 1 показано, как использовать задачу CreateItem, чтобы добавить параметр задачи и создать список новых элементов вместе с метаданными. В примере 3 показан новый способ добавления метаданных непосредственно в ItemGroup.

Пример 1. Простой случай добавления параметра задачи с использованием задачи CreateItem. Первый целевой объект использует задачу CreateItem для динамического создания списка новых элементов под названием CultureResource. Второй целевой объект добавляет новые метаданные с именем TargetDirectory для всех ресурсов языка и регилнальныз параметров в исходном списке.

<Target Name="GenerateBeforeCompile">
     <CreateItem Include="SomeGeneratedCode.cs">
        <Output TaskParameter="Include" ItemName="Compile" /> 
    </CreateItem>
</Target>

<Target Name="ProcessCultureResources">
    <CreateItem Include="@(EmbeddedResource)" 
      Condition="'%(Culture)' != ''"
      AdditionalMetadata="TargetDirectory=%
      (EmbeddedResource.Culture)">
    <Output TaskParameter="Include" ItemName="CultureResource" />
    </CreateItem>
</Target>

Пример 2. результаты, полученные в предыдущем примере, теперь можно получить, добавив параметры и метаданные непосредственно в ItemGroup.

<Target Name="GenerateBeforeCompile">
     <ItemGroup>
        <Compile Include="SomeGeneratedCode.cs" />
    </ItemGroup>
 </Target>
 
<Target Name="ProcessCultureResources">
    <ItemGroup>
        <CultureResource Include="@(EmbeddedResource)"
          Condition="'%(EmbeddedResource.Culture)' != ''">
             <TargetDirectory>%(EmbeddedResource.Culture) </TargetDirectory>
        </CultureResource>
    </ItemGroup>
</Target>

Удаление элементов

Чтобы пропустить какие-либо элементы в списках, в предыдущих версиях MSBuild приходилось создавать новые списки. Теперь же можно непосредственно удалять элементы с помощью нового параметра Remove, что иллюстрирует следующий пример:

<ItemGroup>
    <!—Remove *.licx from the EmbeddedResource list - ->
    <EmbeddedResource Remove="*.licx" />
 
    <!—Or remove items in @(licx) from EmbeddedResource list -- >
    <EmbeddedResource Remove="@(licx)" />
</ItemGroup>

См. также

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

Справочные сведения о схеме файлов проектов MSBuild

Другие ресурсы

Основные возможности MSBuild