Выполните это с помощью 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:
Почему выполняется одна партия задачи Message, когда в группе нет элементов? Я бы ожидал, что для нулевых элементов партия будет выполнять нулевое время, и я не увижу "Цвет:", а затем ничего не выводит.
Я делаю что-то неправильно или есть обходное решение для этого?
Спасибо.
Обновление: Я нашел, что вы можете сделать:
<Message Condition="'@(Colors)'!=''" Text="Color: %(Colors.Shade) %(Colors.Identity)"/>
Но если вам неудовлетворителен, чтобы явно писать код для случая, когда нет элементов, каждый раз, когда используется пакетная обработка.