2013-08-26 48 views
0

我正在構建控制器或協助管理構建和部署。在這個過程中,我需要指定構建的變更集編號。 在構建配置中,手動執行此操作時,它與在「過程」|「設置」中設置「獲取版本」參數相同。高級。無法獲得指定的更改集

當我在UI中設置此值時,可以在獲取構建定義時對其進行修改。我所做的修改導致構建按預期工作。

當Get Version空白時,我重複測試,通過代碼加載參數,我總是得到最新版本,好像變更集沒有被指定。

這裏是我的代碼:

foreach (IBuildDefinition def in BuildDefinitions.SelectedItems) 
{ 
    var process = WorkflowHelpers.DeserializeProcessParameters(def.ProcessParameters);      
    process.Add("GetVersion", "C1111"); 
    // process["GetVersion"] = "C1133"; 
    def.ProcessParameters = WorkflowHelpers.SerializeProcessParameters(process); 
    IQueuedBuild result = buildServer.QueueBuild(def); 
} 

看來,構建定義可能包含兩種情況之間不同的值,但我無法找到它。

我錯過了什麼?

+0

此代碼在哪裏運行?在構建過程中還是在您自己的過程中? – DaveShaw

+0

這是我自己的過程,在客戶端計算機上運行。 – JamieMeyer

回答

0

的這個代替:

var request = def.CreateBuildRequest(); 
request.GetOption = GetOption.Custom; 
request.CustomGetVersion = "C1234"; 
server.QueueBuild(request); 

的文檔IBuildServer.QueueBuild(IBuildDefinition)說:

隊列與所有默認選項 指定構建定義構建。

我猜測它不使用大多數自定義傳入的參數。

其實,思考,設置PARAMS上的要求是有道理的,這是你的構建請求,你沒有改變定義。

+0

我測試了這個代碼,並沒有產生正確的變更集。它執行構建,並交付最近的變更集。 – JamieMeyer

+1

戴夫 - 我讀了你的回覆5次,並根據你的回答計算出答案。顯然,我沒有逐字地嘗試你的代碼,我仍然在排隊,而不是要求。謝謝。 – JamieMeyer

+0

@JamieMeyer - 我不知道還有什麼可以嘗試的,我沒有時間去測試這個,但是我從逆向工程TFSBuild.exe得到了它) – DaveShaw