我們經常在用vs2005做項目的時候會把一個項目分成幾個模塊(不管是對於功能上,還是系統構架上面),為的是以后部署,還有修改維護時候的方便。這樣就會帶來一個問題,隨着模塊的增加(這里所說得每個模塊就是指每個項目),我們如果依賴IDE的話,每次都得從源代碼管理器讀取最新得版本,進行編譯。然而IDE加載得時候會加載很多必須得文件,這樣就大大浪費了時間。再有就是我們不能一次都把這些項目都編譯了。我們不得不重復着打開編譯這樣的順序。這里也許大家會想到nant,但是nant不支持.net2.0(聽說是被微軟收購了...)不管怎樣MS給我們提供了具有同樣功能的工具:MSBuild ,該工具位於:(前提是裝了FW2.0)C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MsBuild.exe。該工具和ant一樣都是按照它一個按照它約定的xml文檔來進行解析編譯。慶幸的是我們編譯項目的時候不需要去編寫這個xml文檔(用ant的時候我們經常會編寫一個.build文件)當然我們也可以去寫。vs2005的項目文件(.sln)我們可以用notepad看到,它就是一個xml文檔,而且規格完全符合msbuild所需要的文檔結構。由此我不得不佩服MS整合的厲害。
下面我就利用批處理結合Msbuild實現快速編譯,假設我們的項目Project目錄下包含3個部分,第一部分為實體項目(目錄名稱為Entities,項目名稱為Entities.sln,第二部分為業務邏輯(目錄為Business,項目名稱為Business.sln),第三部分為UI(目錄為UI,項目名稱為UI.sln)。編譯順序為先編譯Entities再編譯Business最后才能編譯UI。
我們在project下面建一個bat批處理文件。在里面編寫批處理代碼
@echo off
echo Delete the output directory!
rd Release /s/q
rd Debug /s/q
echo Building Entities.sln, please wait a minute...
"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MsBuild.exe" Entities\Entities.sln
/t:rebuild
/p:configuration=Debug >Entities.log
echo Building Entities.sln Complete!
echo Building Business.sln, please wait a minute...
"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MsBuild.exe" Business\Business.sln
/t:rebuild
/p:configuration=Debug >Business.log
echo Building Business.sln Complete!
echo Building UI.sln, please wait a minute...
"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MsBuild.exe" UI\UI.sln
/t:rebuild
/p:configuration=Debug >UI.log
echo Building UI.sln Complete!
到這里就結束了
前面三行是清空輸入路徑。
需要解釋的是MsBuild后面的參數/t是taget :可以是Rebuild。
/property:<n>=<v> 設置或重寫這些項目級屬性。<n> 為
屬性名,<v> 為屬性值。請使用
分號或逗號分隔多個屬性,或者
分別指定每個屬性。(縮寫為: /p)
示例:
/p:configuration=Debug;OutDir=bin\Debug\
OutDir就是指明了Release或者Debug的輸出路徑,如果不設置就是用IDE中給該項目設置的路徑。
>Business.log是輸入日志。在里面可以看到項目編譯成功或者失敗的信息。