2012-05-06 16 views
5

如何在MSBuild的自定義任務中訪問當前的Project上下文?起初,似乎ProjectCollection上的GlobalProjectCollection引用將允許訪問,但這似乎是空的,至少從命令行運行MSBuild時是如此。如何訪問自定義任務中的當前項目上下文?

我目前能獲得基於關閉以下方式當前項目文件的新項目如:

List projectAssemblies = new List(); 
using (XmlReader projectFileReader = 
    XmlReader.Create(this.BuildEngine.ProjectFileOfTaskNode)) 
{ 
    Project project = new Project(projectFileReader); 
    foreach (ProjectItem item in project.AllEvaluatedItems) 
    { 
     ... woo hoo ... 
    } 
} 

,但它只是似乎是一個很大的麻煩。我怎樣才能訪問我的任務被調用的項目?

回答

5

你不行。 MSBuild是專門設計的,因此單個任務只能訪問您明確傳遞給任務的參數,而沒有其他任何東西。這使得MSBuild文件更易於閱讀,現在您知道每個任務只受您調用此任務時指定的內容的影響。

您擁有的代碼不是創建項目的副本,而是創建新實例,因此您不應該期望屬性相同。例如,當前正在執行的項目的實例(從中調用任務的位置)可能會從命令行覆蓋屬性或沿着項目的構建方式進行更改,而新創建的項目在第一次之後將具有屬性的默認值MSBuild引擎傳遞文件。

+1

你是對的。即使任務也從其傳入的容器項目引用,而不是從內部引用某個父對象。由於這是我目前正在嘗試引用的內容,因此我會着眼於以類似的方式推導出這個核心任務的參考。 – bojolais

+0

全球性質呢?這些可以在任務中訪問嗎? – Irek

相關問題