在调用目标之前如何检查其是否存在?

8
有没有一种方法可以检查目标是否存在,以便我们只在其存在时调用它?
1个回答

4
您可以使一个目标依赖于另一个目标。
...

<Target Name="Two" DependsOnTargets="One">
    <Message Text="... comes Two." />
</Target>

<Target Name="One">
    <Message Text="After One ..." />
</Target>
...

从你最近的帖子中可以看出,你试图大量依赖于调用目标,这与MSBuild的理念相违背。

相反,尝试建立目标之间的依赖关系。


如果目标“Two”是一个已经存在的目标怎么办?也就是说,你没有编写它。 - Russell Horwood
@NineTails 依赖关系应该总是有效的 - 除非您尝试依赖于不存在的目标。 - Filburt
我的意思是,假设我想让“Build”任务依赖于我的目标。我无法编辑“Build”任务并给它“DependsonTargets”属性,也没有等效的反向属性,例如“DependsOnThisTarget”。那么,如何在不编辑目标“Two”的情况下使目标“One”始终在目标“Two”之前运行? - Russell Horwood
@NineTails 这篇回答针对“VS2012中的BeforeBuild和其他目标发生了什么”(https://dev59.com/vmYr5IYBdhLWcg3wYZKD#13785069),应该可以解决你的问题。我有一段时间没有使用MSBuild,不知道`BeforeTargets`和`AfterTargets`,但是快速搜索后找到了这些内容。 - Filburt
@Filburt 不幸的是,如果目标“One”具有属性“BeforeTargets =”TargetTwo“”,那么如果您调用“TargetTwo”,则“TargetOne”将不会执行;如果您调用“TargetOne”,则“TargetOne”将首先执行,然后才是“TargetTwo”。我正在寻找一种方法来调用“TargetTwo”,并始终使“TargetOne”在其之前运行,就像我可以设置“TargetTwo DependsOnTargets =”TargetOne“”一样。我不认为在MSBuild中可能存在这样的事情。 - Russell Horwood
@NineTails 我尝试了一个更简单的解决方案:只需按所需顺序调用MSBuild并指定目标即可:MSBuild.exe Test.proj /target:One;Two - 无需修改您的目标。如果这仍然无法解决您的问题,您应该发布一个新的问题。 - Filburt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接