如果这些文件中的任何一个不存在,则执行目标
If Any of These Files Don't Exist Execute Target
我有一个Target
,如果我的ItemGroup
中没有任何文件,我想运行一次。
<ItemGroup>
<Foo Include="a.txt;b.txt;c.txt" />
</ItemGroup>
<Target Name="Bar" Condition="?">
我的问题是在"?"中放什么。
您可以使用另一个Target来浏览文件列表(Targets擅长什么!)并在Property中留下结果。制作一个依赖于测试程序Target和Bar的包装器Target。Bar具有使用第一个目标设置的机制的条件。
请注意,在任务完成之前,不会看到任务中的全局属性集,因此习惯用法是将产生结果的事物和消耗结果的事物包装为空任务的从属对象。
我认为您还需要使测试程序成为Bar的依赖项,以确保它得到正确的顺序。
类似这样的东西:
<Target Name="TestLoop" Outputs="%(Foo.Identity)">
<PropertyGroup>
<Tested Condition="Exists(%(Foo.Identity))">Present</Tested>
</PropertyGroup>
</Target>
触发TestLoop后,如果且仅当至少有一个文件存在时,测试的属性将设置为"存在"。也就是说,它编码一个循环逻辑OR。
现在,如果您将其用作依赖项:
<Target Name="Wrapper" DependsOnTargets="TestLoop;Bar" />
然后您可以让Bar查看TestLoop留下的状态。假设它们以正确的顺序执行,而不是并行执行!为了确保这一点,还将TestLoop作为Bar的先决条件,构建引擎将确定所需的顺序,并知道在完成TestLoop之前不要尝试执行Bar。
哦,而Wrapper就是我们要找的目标。如上所述,如果你直接询问Bar,它不会看到属性更新(我认为)。因此,您可以命名它们,使Wrapper成为公开的Bar,而您的Bar成为内部Bar_helper。
相关文章:
- 我们可以访问一个不存在的联盟的成员吗
- C++:对不存在的命名空间使用命名空间指令
- g++ 说函数不存在,即使包含正确的标头
- 程序不会执行函数 c++
- 显式 std::exception_ptr 转换为 bool 不存在.VS2010 错误?
- C++ 尝试在不存在的构造函数中引用已删除的函数(使用 rapidJson)
- 查找第一个数组中不存在的元素
- 查找不存在的键时,unordered_map返回什么
- 如何优化代码以返回最接近给定整数的数字,但给定列表中不存在?
- 当我的 if 条件计算结果为 false 时,我的 else 块将不会执行
- set::find 查找不存在的元素
- 有没有办法将字符串添加到 Vector 中,但前提是它尚不存在?->C++
- inet_ntop返回不存在的地址
- CPP 使用不存在的键访问映射
- 为什么QMediaGaplessPlaybackControl不存在?
- 如果键不存在,使用 [] 运算符访问 STL Map 元素会添加新元素
- C++ Linux 可执行文件一直尝试使用不存在的库
- 如果文件夹不存在,则创建文件夹,如果存在,则不执行任何操作
- 运行时错误 -f1.exe 不存在或不是可执行文件
- 如果这些文件中的任何一个不存在,则执行目标