2014-09-01 38 views
0

我在Brian Kretzler的书中读到了关于使用这些机制的内容,特别是Adam Badura发布的this example。 (“清洁/重建的确取消预期以及文件”,他指出)与标准MSBuild基础结构进行交互:<CleanDependsOn>

按照巴杜拉的例子,我有:

<PropertyGroup> 
    ⋮ 
    <CleanDependsOn>QtClean;$(CleanDependsOn)</CleanDependsOn> <!-- doesn't work --> 
    ⋮ 
</PropertyGroup> 

在顶层(文档的根元素的直接子)。

当我使用IDE菜单清理解决方案时,不执行QtClean目标。其中包含的消息任务未出现,并且未观察到RemoveDir任务的预期效果(也没有任何错误消息)。

为什么这不起作用?

回答

0

我已经知道<CleanDependsOn>不起作用,因为它被Microsoft.Common.Targets覆盖(不附加到),它被拉入项目文件的底部。因此,它不能通过项目文件或通常包含的属性表中的内容来扩展。 “扩展目标”包含在项目文件末尾,之后正常的共同目标。

但是,<CppCleanDependsOn>属性在使用的任何地方都会扩展(不会覆盖不包含前一个值)。

的一个一般性回答“为什么这不起作用?”是全局变量是邪恶的。您必须了解变量(“属性”)的时间接近度,因为变量在读取之前可能会再次发生变化,或者在设置之前进行读取。