發表文章

目前顯示的是有「MSBuild」標籤的文章

用VirtualSVN Server架Subversion,用MSBuild取出程式碼

最近想放棄VSS,改用SubVersion。所以就找了一個專案來試一下。要用SubVersion來管理程式碼是蠻簡單的。如果你是用Visual Studio的話,可以使用Ankh。它可以整合到Visual Studio中並使用SubVrsion來管理程式碼。 至於SubVersion的Server端,最方便使用的應該就是 VirtualSVN Server 了吧。只要下載並安裝就可以了。 如果要使用MSBuild來進行專案建置的話,原本的MSBuild並不支援SubVersion,其實就連VSS它也不支援。這些都必須取得第三方套件來用,才能由這些程式碼管理工具中取得程式碼來進行編譯。所以可以去取得 MSBuildTasks 套件來安裝使用。 老實說在MSBuildTasks中的說明文件,它只有說明這些套件的一些屬性及方法。完全沒有範例。實在很難體會如何去使用它來透過SubVersion Server下載程式碼。所以就到網路上找了一些資料,可是 這篇文件中的MSBuild專案檔好像也是不行 。因為它沒有指定Svn.exe的路徑,可能是因為它不是用VirtualSVN Server吧。 後來才發現, 原來要指定這個路徑才行 。改了一下果然就可以下載了。只是一開始以為要用SvnUpdate這個指令,因為我只是想更新程式碼,而不是想要簽出。但後來發現要取得程式碼的話,還是要用 SvnCheckout才行。 MSBuild xml檔如下: < Project xmlns ="http://schemas.microsoft.com/developer/msbuild/2003" > <!-- Version : 1.0 Revision: --> < PropertyGroup > < RootDir > ./ </ RootDir > < SlnName > TX4 </ SlnName > < ExtProgramPath > D:\Ext Programs\ </ ExtProgramPath > < SvnVersion ></ SvnVersion > ...

利用改寫要執行的Target的方式讓後來的人可以改變流程

最近在使用MSBuild的專案批次建置專案時,發現有些專案中,它會需要一些特別的流程。例如在引用的DLL中,大部份都是需要xxx.DLL,但可能有某個特別的專案,就是要引用到其它名稱的DLL。這樣的特例可能就無法寫在固定的流程中給所有要編譯的專案來執行了。 那要怎樣才能讓每個專案在要進行編譯前,可以準備好自己所需要參考到的檔案呢(這裏說檔案是因為不一定就是DLL,可能是其它種類的檔案) 目前我的作法就是在既定的編譯流程中,加入一個叫作SlnBeforeBuild的target。如果要編譯的專案沒有自已要特別執行的作業的話,就不用改寫這個target。 例如我有個編譯用的MyBuild.proj,在MyBuild.proj會去引入DefaultSlnBeforeBuild.proj。而DefaultSlnBeforeBuild.proj的程式碼大致上如下: < project xmlns ="http://schemas.microsoft.com/developer/msbuild/2003" > < target name ="SlnBeforeBuild" > < message text ="Default sln BeforeBuild" > </ message ></ target > </ project > 在DefaultSlnBeforeBuild.proj中定義了一個叫作SlnBeforeBuild的target。這個Target在MyBuild.proj時會被執行到。 一般的狀況下都不用改寫SlnBeforeBuild這個target。但如果有需要時,可以在每個專案的proj中,在它引用了MyBuild.proj後,再寫一段自已的SlnBeforeBuild的target。這樣就可以達到改寫的功能,當MyBuild.proj中要呼叫到SlnBeforeBuild這個target時,就會改執行新改寫的內容了。 會有這樣的結果,我猜應該是MSBuild在執行時,所引入的專案中的任何資料,都是以最後的為主。也就是後面的會蓋掉前面的。

MSBuild相關資源

MSBuild Team Blog