2012-10-31 60 views
2

當我們使用TFS 2008(SP1)時,我們曾經能夠訪問包含構建運行原因的「Reason」MSBuild屬性。構建開始後即可使用,因此無需獲取任務/目標。現在我們正在使用TFS 2010(和MSBuild /升級模板,而不是工作流),並且該屬性不再被填充。我可以編寫一個自定義任務來從IBuildDetail檢索信息,但是沒有可以立即爲我的MSBuild腳本提供的屬性?我以前可以根據構建原因進行條件MSBuild腳本導入,如果必須使用任務/目標來獲取原因,這將不起作用。TFS 2010中的「Reason」屬性發生了什麼構建

回答

1

您仍在使用MSBuild腳本,因此我假設您使用升級模板。您可以克隆/編輯或修改升級模板,以便模板獲取當前的構建原因並通過運行TfsBuild for Configuration文件夾活動將其傳遞到MSBuild。在Visual Studio中打開模板進行編輯,然後執行以下操作:

選擇運行代理活動並轉至變量選項卡。創建一個新變量來存儲構建原因並使用IBuildDetail中的信息填充其默認值。添加類似以下內容的變量列表:

Name: currentBuildReason 
Variable type: String 
Scope: Run On Agent 
Default: BuildDetail.Reason.ToString() 

接下來,單擊屬性對話框運行TfsBuild的配置文件夾活動。選擇CommandLineArgument elipses以打開將參數傳遞給TFSBuild的對話框。你可能只看到一個變量中列出:

MSBuildArguments 

現在,您可以在當前構建理由添加到命令行參數(和仍然可以通過任何現有MSBuildArguments),與此類似:

String.Format("/p:CurrentBuildReason={0} {1}", currentBuildReason, MSBuildArguments) 

單擊確定關閉對話框。這會將當前構建原因作爲名爲CurrentBuildReason的新參數傳遞,並且可以在MSBuild腳本中將其引用爲$(CurrentBuildReason)。

保存並簽入升級模板。 將模板分配給構建定義。該定義使用的MSBuild腳本現在可以使用上述的變量。

相關問題