2013-10-01 115 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