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

时间:2013-10-01 07:21:04

标签: c#-4.0 msbuild msbuild-task

是否可以从通过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.
}

是的,有可能复制某些任务(Delete,MakeDir等)的功能,但为什么要重新发明轮子呢?此外,重新实施CL和Link等任务会非常耗时。

为什么我需要这个?

我正在编写一个自定义任务,基本上需要复制文件,调用CL预处理器等。有人可能会质疑这种“巨大”任务的设计,但我们只是说一些要求迫使我们走这个“乏味”路径。


编辑 以强调此问题的正确背景

这个问题不是来自设计,而是来自技术角度

作为这个领域的新手,我只想知道技术上是否可行?如果是,怎么样?如果不是,为什么不呢?

1 个答案:

答案 0 :(得分:3)

首先,您可以在MSDN找到用于MSBuild任务的类。 但是你应该注意到它是明确写的:

  

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

此外,您可以在此blog post中找到此类用法的示例。

这就是你所问的答案,但也许你需要不同的解决方案:你可以在许多子任务中制动你的任务:第一个自定义任务的输出被发送到可由内置使用的MSBuild项目发送到第二个自定义任务的内置任务的任务和输出等等。