2015-02-09 55 views
4

我正在嘗試將我們的TFS服務器升級到2013.我們目前使用的是2012版,但我們也一直執着於升級模板以獲得寶貴的生命。 2013年,我們希望轉到默認模板並儘可能少地修改它。使用TFS 2013替換TFSBuild.proj文件

當您考慮默認模板要求您添加每個您想要構建的.csproj或.sln文件時,問題就出現了。關於tfsbuild.proj文件的好處在於,不僅可以在服務器上構建,還可以在命令行上檢出整個分支並在本地構建所有內容,只需將tfsbuild.proj文件傳遞給msbuild.exe即可。此外,開發人員可以擁有tfsbuild.proj文件,而無需寫入權限來更改構建定義。

什麼是TFS 2013中TFSBuild.proj文件的替代?

我的要求是: 清潔構建配置。 可以在本地輕鬆構建一切。

TFS 2013中這個問題的解決方案是什麼?

回答

2

創建您的TFS構建定義使用的包裝MSBuild .proj。我們使用這種技術進行NuGet包恢復,但它同樣可以用來鏈接多個解決方案文件。

對於本地構建,您可以使用帶有.proj包裝器的msbuild作爲目標(我只是直接構建.sln文件,因爲只有1個)。

.proj文件(不是建議你應該使用這個確切的.proj文件,只是一個例子)

<PropertyGroup> 
    <OutDir Condition=" '$(OutDir)'=='' ">$(MSBuildThisFileDirectory)bin\</OutDir> 
    <Configuration Condition=" '$(Configuration)'=='' ">Release</Configuration> 
    <SourceHome Condition=" '$(SourceHome)'=='' ">$(MSBuildThisFileDirectory)</SourceHome> 
    <ToolsHome Condition=" '$(ToolsHome)'=='' ">$(MSBuildThisFileDirectory)tools\</ToolsHome> 
</PropertyGroup> 

<ItemGroup> 
    <Solution Include="$(SourceHome)*.sln"> 
    <AdditionalProperties>OutDir=$(OutDir);Configuration=$(Configuration)</AdditionalProperties> 
    </Solution> 
</ItemGroup> 

<Target Name="RestorePackages"> 
    <Exec Command="&quot;$(ToolsHome)NuGet\NuGet.exe&quot; restore &quot;%(Solution.Identity)&quot;" /> 
</Target> 

<Target Name="Clean"> 
    <MSBuild Targets="Clean" 
      Projects="@(Solution)" /> 
</Target> 

<Target Name="Build" DependsOnTargets="RestorePackages"> 
    <MSBuild Targets="Build" 
      Projects="@(Solution)" /> 
</Target> 

<Target Name="Rebuild" DependsOnTargets="RestorePackages"> 
    <MSBuild Targets="Rebuild" 
      Projects="@(Solution)" /> 
</Target> 

+0

感謝。我不確定這是唯一的方法,還是MS的「正確」方式,或者是什麼。不幸的是,儘管MS已經改進了TFS文檔,但似乎TFSBuild.proj文檔在MSDN上還沒有達到標準。 – tigerbyte 2015-02-09 16:57:36