2013-10-01 116 views
2

是否可以从正在通过MSBuild项目调用的自定义(内联或非内联)任务中调用其他MSBuild任务(CL,Link,Delete,MakeDir等)文件?喜欢的东西:在自定义任务中调用MSBuild任务

<!-- 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目标,首先使用复制复制文件,然后调用CL,Link,MakeDir等 – stijn

+0

您可以创建一个简单的机器,当与另一个相对大小和质量的物体并排放置时,可以通过“旋转”沿着“轴线”从而减少摩擦。我们称之为“轮子”,并将其设计为四角。 – Nicodemeus

+0

哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈。 –

回答

2

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

此API支持.NET Framework基础结构不打算直接使用从代码

您也可以找到例子,例如在此使用blog post

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

+0

是的,谢谢你的指针..我搜索并找到一类CL任务(Microsoft.Build.CPPTasks.CL)。我不打算直接从我的代码中使用它们。这个问题出于好奇。 –

+0

以防链接死亡:http://web.archive.org/web/20161024064310/http://codefocus.blogspot.com.au/2008/10/running-msbuild-tasks-programatically.html – reduckted