簡體   English   中英

如何在自定義任務中訪問當前項目上下文?

[英]How do I access current Project context within a custom Task?

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

我目前可以通過以下方式從當前項目文件中獲取新的Project實例:

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 ...
    }
}

但這看起來很麻煩。 我如何才能訪問從中調用任務的項目?

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

您擁有的代碼不是在創建項目的副本,而是在創建新的實例,因此您不應期望屬性相同。 例如,當前執行項目的一個實例(從中調用您的任務的實例)的屬性可以從命令行中覆蓋,也可以在構建項目的過程中進行更改,而新創建的項目在第一次執行后將具有該屬性的默認值MSBuild引擎通過該文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM