问题 你如何调用被覆盖的MSBuild目标


在MSBuild中,您可以覆盖一个 <Target /> 来自你自己的另一个文件。比如说 AfterBuild 目标包括在内 Microsoft.Common.targets 简单地通过使用相同的名称定义您自己的目标文件:

<Target Name="AfterBuild">
    <!-- Do something different -->
</TargetName>

你会看到这样一个音符:

在项目“XXXXX”中使用目标“AfterBuild”覆盖项目“C:\ Windows \ Microsoft.NET \ Framework \ v3.5 \ Microsoft.Common.targets”中的目标“AfterBuild”。

有没有办法调用原来的AfterBuild目标?

我想这样做来检测某些复杂的默认目标,然后执行原始行为。许多目标(如Build)暴露了可用于此的BuildDependsOn属性。许多其他人没有 - 我想在不完全复制其内容的情况下覆盖它们。


5197
2018-05-11 23:53


起源



答案:


处理MSBuild脚本时,它还将处理导入的文件。结果将是整个脚本的单个内存规范表示。当遇到已存在的目标时,先前的定义将被丢弃,因此无法调用原始目标。

Sayed Ibrahim Hashimi

我的书: 在Microsoft Build Engine中:使用MSBuild和Team Foundation Build


13
2018-05-14 02:45