最近考慮在一個項目管理工具中加入Daily Build功能,就研究了一下VS.NET2003的命令行編譯模式。以前用MFC寫過一個專門針對VB6.0使用的Daily Build工具,爲什麼沒做成通用的呢?一是通用模式往往比較複雜,不好寫。二是那時候網上找了很多關於命令行編譯的文章,都教我要自己手動一個一個模塊去編譯,如果有引用了某個Assembly或者什麼資源文件的話,都要手動Link……不過還好,自己終於研究出了一點點小成果,所以趕緊和大家分享,希望對某些朋友有所幫助!
基本技術介紹:
命令行編譯,針對VS.NET2003,主要使用了devenv.exe這個文件,它位於“Microsoft Visual Studio .NET 2003/Common7/IDE/”目錄下。
用法:
devenv [solutionfile | projectfile | anyfile.ext] [switches]
可以調用 devenv,用第一個參數指定解決方案文件或項目文件。也可以調用 devenv,使第一個參數作爲要在編輯器中打開的任何其他類型的文件。如果提供項目文件,IDE 將通過在與項目文件相同的目錄中查找與項目文件具有相同基名稱的 .sln 文件,在解決方案的上下文中打開該項目文件。如果存在 .sln 文件,則IDE 將查找引用該項目的單個 .sln 文件。如果不存在這樣的單個 .sln 文件,則 IDE 將創建一個具有默認 .sln 文件名的未保存的解決方案,而該默認文件名與項目文件具有相同的基名稱。
命令行生成:
devenv solutionfile.sln /build solutionconfig [ /project projectnameorfile [ /projectconfig name ] ]
可用的命令行開關:
/build 生成指定的解決方案配置
/project 指定生成項目而不是解決方案
必須指定 /build 才能使用 /project
/projectconfig 指定要生成的項目配置
必須指定 /project 才能使用 /projectconfig
/out 將生成結果寫入指定的文件
/rebuild 與 /build 類似,但先執行強制清理
/clean 清理生成結果
/deploy 生成指定的解決方案配置然後部署它
/run 運行指定的解決方案配置
/runexit 運行指定的解決方案配置然後終止
/command 啓動後執行指定的內部命令行
/mditabs 使用選項卡式文檔界面
/mdi 使用 MDI 界面
/fn 使用指定的字體名稱
/fs 使用指定的字體大小
/LCID 使用指定的語言 ID
/noVSIP 禁用用於 VSIP 測試的VSIP 開發人員許可證密鑰
/safemode 出於穩定性僅加載默認的環境和服務
/resetskippkgs 允許曾被標記爲加載失敗的 VsPackages再次加載
/migratesettings 遷移另一個版本中的某些用戶設置
產品特定的開關:
/debugexe 打開要調試的指定可執行文件。命令行的其餘部分作爲它的參數傳遞到此執行文件。
/useenv 使用 PATH、INCLUDE、LIBPATH 和 LIB 環境變量而不是使用 VC++ 生成的 IDE 路徑。
若要從命令行附加調試器,請使用:
vs7jit.exe -p <pid>
提示:
你可以通過“開始菜單”->“程序”->“Microsoft Visual Stuido .NET 2003”->“Visual Studio .NET 工具”->“Visual Stuido .NET 2003 命令提示”啓動命令行操作窗口,其實就是我們平時通過cmd進入啓動的命令行窗口,只不過你可以在下面直接使用devenv了,不必指出路徑。
實踐項目一:通過命令行編譯整個解決方案
假設現在有這麼一個解決方案,C:/TestCommandLine/TestCommandLine.sln。在命令行狀態下輸入下列命令行,可以編譯出此解決方案的Release版本,若要獲得Debug版本,將Release替換成Debug即可:
devnev C:/TestCommandLine/TestCommandLine.sln /build Release
PS:.NET 2003下的MFC, C#, ASP.NET, VB.NET均測試通過,該解決方案可以只包含一個項目,也可以是N層架構的大型應用。
實踐項目二:通過命令行編譯一個解決方案中的某個項目
假設現在有這麼一個解決方案(C#),C:/TestCommandLine/TestCommandLine.sln,它包含2個項目:一個是Project1.csproj,另一個是Project2.csproj,通過如下命令行可以編譯Project1的Release版本:
devnev C:/TestCommandLine/TestCommandLine.sln /build Release /project C:/TestCommandLine/TestCommandLine.csproj
PS:如果這個項目引用了某個項目,則該項目也會被編譯一次。
實踐項目三:清理MFC解決方案
輸入以下命令行將會清理該解決方案的Release版本:
devnev C:/TestCommandLine/TestCommandLine.sln /clean Release
PS:.NET項目裏面沒有清理這個功能,但傳統Win32,MFC有。
實踐項目四:生成解決方案的同時,寫入日誌文件
如果要生成日誌文件,可以簡單地在命令行最後加上/out logfilename.log。
devnev C:/TestCommandLine/TestCommandLine.sln /build Release /out C:/TestCommandLine/BuildLog.log
其實devnev還有很多功能,那就留給大家去發現吧!
二〇〇四年十一月二十八夜 張玉祥<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />