1. 程式人生 > >VS2008Express版本環境的Solution批量編譯

VS2008Express版本環境的Solution批量編譯

creat create etime 方案 老系統 inpu express forfile rar

最近做一個傳統老項目,因為Solution太多,考慮做一個代碼編譯batch工具,起初一看,應該是很簡單的問題。

用MSBUILD 做編譯順其自然, 興致勃勃的將Batch處理文件全部寫好,突然放到環境中執行,發現編譯出問題。

而後,對Solution中的Project進行單獨編譯,仍然報錯。考慮編譯順序的情況下,仍舊。後來調查相關繼續文檔

, 發現是因為MSBUILD時,會將管理引用的所有DLL等相關參照全部進行連接編譯。

而正好,老系統有一個直接從外部拷貝過來的DLL,編譯不會通過。

繼續查找解決方案, 可用devenv.exe作編譯工具。 然而本機裝的是VS2008Express版本,根本沒有該EXE

文件。得知,VS2008EXpress版本情況下,用vbexpress.EXE執行文件。隨後就是到微軟官方網站查詢對應的

使用方法。 原理是通過CreateSolutionLists.bat生成對象Solution的List文本文件。

然後 用foreachTest.bat 來做循環執行處理,完成多個Solution的批處理。

以下是後來做出的bat文件

--- CreateSolutionLists.bat START----------

set solutionList=C:\NACCS_6svn\SolutionList.Txtcd C:\NACCS_6svn\newsys\Projectsif exist %solutionList% ( echo Solution list file is existied, please input any key to contiune! pause) forfiles /m *.sln /s >%solutionList% echo please check the content of the solutionList file, delete the ‘"‘ in the file. pause

--- CreateSolutionLists.bat END----------

------ foreachTest.bat START -----------------

@echo build start %date% !!!

@echo offset startTime=%date%set vbexpresscmd="C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\vbexpress"set inpath=C:\NACCS_6svn\newsys\Projectsset solutionList=C:\NACCS_6svn\SolutionList.Txtset filetime=%time:~0,2%%time:~3,2%%time:~6,2%set logPath=C:\NACCS_6svn\logfor /f "tokens=*" %%a in (%solutionList%) do ( echo %vbexpresscmd% %inpath%\%%a /build Debug /out %logPath%\%%a_%filetime%.log call %vbexpresscmd% %inpath%\%%a /build Debug /out %logPath%\%%a_%filetime%.log if exist %logPath%\%%a_%filetime%.log ( echo error happened! Pause ))@echo build end finished!!!@echo start at: %startTime%; Finished at: %date%.pause

------ foreachTest.bat END-----------------

關聯連接

https://msdn.microsoft.com/ja-jp/library/s2h6xst1.aspx

https://blogs.msdn.microsoft.com/msbuild/2005/11/19/msbuild-in-visual-studio-part-12-compiling-inside-visual-studio/

VS2008Express版本環境的Solution批量編譯