Выполните это с помощью msbuild:
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Main" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Colors Include="Blue">
<Shade>Dark</Shade>
</Colors>
</ItemGroup>
<Target Name="Main">
<Message Text="Color: %(Colors.Shade) %(Colors.Identity)"/>
</Target>
</Project>
И выводит:
Color: Dark Blue
Все хорошо, и хорошо, но удалите цвет и используйте это:
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Main" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
</ItemGroup>
<Target Name="Main">
<Message Text="Color: %(Colors.Shade) %(Colors.Identity)"/>
</Target>
</Project>
И выводит:
Color:
Почему выполняется одна партия задачи «Сообщение», если в группе нет элементов? Я ожидал бы, что будет ноль элементов, пакет будет выполнен ноль раз, и я не увижу «Color:», за которым ничего не следует.
Я что-то не так делаю или есть обходной путь для этого?
Спасибо.
Обновление:
Я нашел, что вы можете сделать:
<Message Condition="'@(Colors)'!=''" Text="Color: %(Colors.Shade) %(Colors.Identity)"/>
Но, если вы чувствуете себя неудовлетворительным, приходится явно писать код для случая, когда нет элементов каждый раз, когда используется пакетная обработка.