2013-02-27 110 views
1

我有一個用於TFS 2010(構建服務器)構建任務的解決方案。TFS 2010爲某些項目構建具有不同路徑的解決方案

大多數項目都可以在同一位置完成,唯一不同的是一些動態加載的插件,它應該位於相對於其他程序集的/ Plugins子文件夾中。

1)我已經嘗試了一些東西,比如修改我的DefaultTemplate.xaml,只是爲了找出那個(因爲我只指定了.sln文件),我無法區分每個項目級別的輸出路徑。 (在工作流中,有一個「For BuildSettings.ProjectsToBuild中的每個項目」都帶有一個serverBuildProjectItem變量 - 雖然只有.sln文件作爲我的項目,但這個變量只會被調用一次。)所以這不能用於區分每個項目基礎。

enter image description here

2)我想一件事是指定OutputPath的地方找到一個解決方案。

<OutputPath Condition=" '$(CommonOutputPath)'=='' ">../myOutDir/Plugins/</OutputPath> 
<OutputPath Condition=" '$(CommonOutputPath)'!='' ">$(CommonOutputPath)Plugins\</OutputPath> 

這會將所有程序集保留在服務器構建的同一文件夾中,因此不起作用。

3)我開始創建後生成事件,以手動將文件複製到正確的位置,但迄今未能區分服務器與本地情況。 (在這裏,這是行不通的。)

<PropertyGroup Condition=" ' $(TeamBuildConstants) ' == ' '> 
<PostBuildEvent>mkdir $(SolutionDir)..\out\$(OutDir)plugins 
copy $(TargetPath) $(SolutionDir)..\out\$(OutDir)plugins 
</PropertyGroup> 
<PropertyGroup Condition=" ' $(TeamBuildConstants) ' == '_TEAM_BUILD_ '> 
echo figure out some copying for this once the condition gets hit.. 
<PostBuildEvent></PostBuildEvent> 
</PropertyGroup> 

我怎樣才能改變任何項目文件或配置構建流程有這個工作? (然後應該在本地以及服務器版本上工作。)

我想要什麼: 將所有標準程序集放在同一個文件夾中,所有插件項目都放在./Plugins/子文件夾中? (本地,相對於項目文件(默認值?),tfs-build相對於指定的放置位置)

回答

1

從2010年開始,基於工作流的tfs構建引入了它們與msbuild之間的強烈區別 - 編譯項目及其內容使用msbuild,將deplopyment包與工作流組合在一起。

由於您聲明這應該是本地運行的,因此您的編譯需要使用含義插件才能成功/項目正常工作,因此應該在解決方案級別處理它們。

有幾個aproaches可以使用

  • 後生成事件,對每一個項目 - 你可能會提供2套動作一個地方上的TFS構建人 - 你的形式給出3,模式可以區分使用(有變化如何以及在哪裏你能做到這其中有被從項目屬性可編輯的優勢)

構建TFS(VS外)

<PostBuildEvent> IF NOT "$(BuildingInsideVisualStudio)" == "true" (YourActions) </PostBuildEvent>

討論一下:BuildingInsideVisualStudio Property Value Not Working With File Reference and Project Reference Conditional

  • 添加或添加的插件文件的鏈接,從源頭控制每個項目的插件文件夾的相對中心位置的項目,確定項目建設的行爲可能是因爲copyifnewer /總含量
+0

謝謝,這對我來說伎倆。我指定了我現在想要在我的機器上構建的輸出路徑,並且在生成機器上構建了生成後事件。花費一些時間找出哪些變量具有什麼值。 – 2013-02-28 16:53:47

+0

在你的情況下,將插件文件放在項目插件文件夾中可能更「乾淨」的aproach - 限制這是如果你需要它們出現在輸出的地方不是在項目中相同的路徑 - 例如,你不想要存儲在項目根目錄中,但需要位於應用程序的根目錄中。 – drk 2013-03-01 10:49:27

相關問題