CreateItem и CreateProperty устарели в MSBuild 3.5 (хотя, конечно, всегда будут работать). Было совершенно очевидно, что нам нужен одинаковый синтаксис для ItemGroup и PropertyGroup для работы внутри целей.
Но у ItemGroup внутри цели есть особые дополнительные способности. Он может изменять элементы: например, это добавит true ко всем элементам в списке ресурсов, которые имеют метаданные с именем Primary со значением true; только если копирование метаданных еще не выполнено:
<ItemGroup>
<Resources Condition=" '%(Primary)' == 'true' ">
<Copy Condition=" '%(Copy)' == '' ">true</Copy>
</Resources>
</ItemGroup>
Еще одна магическая сила: теперь вы можете удалять предметы из списка. В этом примере будут удалены все элементы из списка ресурсов, имеющие тип метаданных со значением Bitmap:
<ItemGroup>
<Resources Condition=" '%(Type)'=='Bitmap' " Remove="@(Resources)"/>
</ItemGroup>
Эти магические силы работают только внутри, а не снаружи.
Для получения полной информации об этом материале я настоятельно рекомендую книгу Сайеда Хашими о MSBuild. Его легко найти на Amazon.
Дан - команда msbuild.