gpt4 book ai didi

msbuild - 当零个项目时,如何停止执行批处理的项目批处理?

转载 作者:行者123 更新时间:2023-12-03 20:40:06 26 4
gpt4 key购买 nike

使用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任务?我本来希望零项,该批处理将执行零次,并且在输出中什么也看不到“ Color:”。

我是在做错什么,还是有解决方法?

谢谢。



更新:
我发现您可以执行以下操作:

<Message Condition="'@(Colors)'!=''" Text="Color: %(Colors.Shade) %(Colors.Identity)"/>


但是,如果在每次使用批处理时都没有项目的情况下必须显式编写代码感到不满意。

最佳答案

我的2美分:

在您的消息任务中,有来自批处理的信息和静态信息(“颜色:”)。我认为MsBuild会打印静态信息,然后分批处理Colors Item的值。问题在于您的集合中没有任何数据(甚至没有声明),我想MsBuild会将其解释为一个空列表,当您尝试打印该列表时,将打印空字符串”。

如果删除静态内容(“ Colors:”和标识前的空白),则不会显示任何内容。

仅在项目集合不为空的情况下,使用批处理进行打印的解决方案是:


检查集合是否为空

<Message Condition="'@(Colors)'!=''" Text="Color: %(Colors.Shade) %(Colors.Identity)"/>

使用 MSBuild transforms

<Message Text="@(Colors->'Color : %(Shade) %(Identity)')"/>

关于msbuild - 当零个项目时,如何停止执行批处理的项目批处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4096366/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com