2012-01-18 85 views
2

我正在嘗試在VS/TFS2010中配置團隊版本。我想MSBuild參數包括以下內容:如何在TFS2010中的MSBuild參數中進行變量替換?

/p:Changeset=BuildDetail.SourceGetVersion 

我想MSBuild展開「BuildDetail.SourceGetVersion」。我知道如何通過編輯xaml來做到這一點,但我希望有一種方法可以讓它在沒有需要的情況下工作。有任何想法嗎?

回答

6

您需要執行的任務TFS

<UsingTask 
    TaskName="Microsoft.TeamFoundation.Build.Tasks.GetBuildProperties" 
    AssemblyFile="C:\Program Files\Microsoft Team Foundation Server 2010 
     \Tools\Microsoft.TeamFoundation.Build.ProcessComponents.dll" 
    /> 

<Target Name="MyTarget"> 
    <GetBuildProperties 
     TeamFoundationServerUrl="$(TeamFoundationServerUrl)" 
     BuildUri="$(BuildUri)"> 
     <Output TaskParameter="BuildNumber" PropertyName="BuildNumber" /> 
     <Output TaskParameter="SourceGetVersion" PropertyName="SourceGetVersion" /> 
    </GetBuildProperties> 
</Target> 

我會使用屬性來計算向大會的路徑,因爲它可能會有所不同,由於開發人員的機器上這將是在Visual Studio下安裝(在我認爲的PrivateAssemblies中)。

由於屬性是從目標執行中動態生成的,因此基於此屬性的任何操作都必須動態計算。基於$(SourceGetVersion)形成全局靜態屬性將不起作用。當然,你可以計算它,然後使用MSBuild任務來運行真實的構建,但是這會變得單調乏味,因爲你需要傳遞其他屬性。如果你想要更好的東西,那麼你最終會在我做的地方重寫Xaml,將它傳遞給MSBuild Action。

+0

您可以在此共享xaml嗎? – Mrchief 2012-09-20 16:32:32

1

我知道你問過關於TFS 2010.
但是,自從TFS 2013有一個非常簡單的方法做到這一點!
只需在您的MsBuild中使用TF_BUILD_SOURCEGETVERSION var,它將從TFS Build傳遞。
請參閱TF_BUILD environment變量僅供參考