Новые методы для управления элементами и свойствами (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