从自定义任务中调用MSBuild任务

4

在通过MSBuild项目文件调用自定义(内联或非内联)任务时是否可以调用其他MSBuild任务(CL、Link、Delete、MakeDir等)?类似于:

<!-- In MSBuild File -->
<MyStrangeTask />

在C#代码中实现"MyStrangeTask"

// After declaring class, properties, etc.
public override bool Execute()
{
    // Call other MSBuild Tasks here: CL, Link, MakeDir, etc.
}

是的,有可能复制一些任务(如删除、MakeDir等)的功能,但为什么要重复发明轮子呢?此外,像CL和Link这样的任务重新实现将耗费时间。
为什么我需要这个?
我正在编写一个自定义任务,基本上需要复制文件、调用CL预处理器等。有人可能会质疑这样一个“巨大”的任务的设计,但我们只是说一些要求迫使我们走这条“繁琐”的道路。
编辑:为了强调这个问题的正确背景
这个问题不是从设计的角度,而是从技术的角度来看。作为这个领域的新手,我只想知道这是否在技术上可行?如果可以,怎么做?如果不行,为什么不行?

1
如果您将自定义任务分成逻辑部分,则不需要这样做。您只需创建一个msbuild目标,首先使用例如Copy复制文件,然后调用CL、Link、MakeDir等。 - stijn
你可以发明一种简单的机器,当它与另一个相对大小和质量的物体并排放置时,可以通过“绕轴旋转”来减少摩擦力,从而促进物体的移动。我们称之为“轮子”,并将其设计为四个角落。 - Nicodemeus
哈哈哈.. :) 是的,(正如我在问题中提到的)我确实理解这不是一个好的设计,但再次引用“让我们只是说一些要求迫使我们走这条“繁琐”的道路”。 - Bhavneet Singh Bajwa
1个回答

4
首先,您可以在MSDN上找到用于MSBuild任务的类。但是需要注意的是,明确写着:

此API支持.NET Framework基础结构,不适合直接从您的代码中使用

此外,您可以在此博客文章中找到此类用法的示例。

这就是您所问的答案,但也许您需要不同的解决方案:您可以将任务拆分为许多子任务:第一个自定义任务的输出被发送到可以由内置任务使用的MSBuild项目中,内置任务的输出被发送到第二个自定义任务中,以此类推。


是的,谢谢您提供指针。我查找并发现了一个名为CL Task(Microsoft.Build.CPPTasks.CL)的类。我并不打算直接从我的代码中使用它们。这个问题是出于好奇而产生的。 - Bhavneet Singh Bajwa
以防链接失效:http://web.archive.org/web/20161024064310/http://codefocus.blogspot.com.au/2008/10/running-msbuild-tasks-programatically.html - reduckted

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