一、MSBuild.exe实现自动化编译
.net Framework 提供的 MSBuild 工具可以方便我们在没有安装 Visual Studio 2005 的系统中编译项目解决方案,当然还可以与用相关工具组合进行 DailyBuild。
先看一个例子,在解决方案目录(Test.sln)命令行输入下面的命令,将会自动编译解决方案。
- MSBuild.exe Test.sln /t:Rebuild /M:1 /p:Configuration=Debug|Release /fl /flp:FileLogger,Microsoft.Build.Engine;logfile=Build.log;errorsonly;Encoding=UTF-8
常用参数说明:
/t:Rebuild|Clearn 生成目标
/p:Configuration=Debug|Release 项目属性
/m[:number] 指定Building时最大并发进程数
/fl 输出Build日志
/flp:FileLogger,Microsoft.Build.Engine;logfile=Build.log;errorsonly;Encoding=UTF-8 指定日志记录的额外参数,如仅打印error日志,使用UTF-8编码格式
/clp:PerformanceSummary 显示任务、目标和项目花费的时间
参考资料:
1.MSDN关于MSBulid的参数的最全资料:http://msdn.microsoft.com/en-us/library/vstudio/ms164311.aspx
2.http://blog.csdn.net/gamecreating/article/details/5186439
二、IncrediBuild的命令行接口——BuildConsole.exe实现自动化编译
IncrediBuild(分布式编译或称联合编译)的命令行调用:
BuildConsole是IncrediBuild的命令行接口,例如:
- BuildConsole.exe test.sln /prj="*" /rebuild /All /Log=test.log /OpenMonitor /cfg="Debug|Win32,Release|Win32"
这里表示编译test.sln解决方案的所有工程,若编译失败其他工程继续编译,打印build日志,打开编译监视器,编译配置的版本为Debug|Win32,Release|Win32。
常用参数说明:
/prj :要编译什么工程(一个解决方案中可能有多个工程),工程名用逗号隔开,支持*和?通配符
/build :就是编译
/rebuild:就是clean & build
/All 正常情况下一个工程编译失败IncrediBuild就会停止编译,加上这个参数后会忽略编译失败的工程继续编译其他工程
/OpenMonitor:会把编译过程窗口打开
/cfg:编译条件选择
BuildConsole的返回值:
0:成功
1:操作过程中发生错误
2:严重错误,如无效参数、未发现输入文件等
3:编译完成前被停止
例如写一个bat,使用BuildConsole进行自动化编译,并根据返回值判断是否编译成功:
- BuildConsole test2.sln /prj="*" /rebuild /OpenMonitor /cfg="Win32|Debug"
- IF %ERRORLEVEL% NEQ 0 pause
上面的 %ERRORLEVEL% 即可获得返回值(这个方法找了好久!)
参考资料:
1.IncrediBuild官网关于BuildConsole.exe的最全介绍:http://www.incredibuild.com/webhelp/BuildConsole.html
三、MSBuild命令移植为BuildConsole命令举例:
举例:
- MSBuild.exe Test.sln /t:Rebuild /M:1 /p:Configuration=Debug|Release /fl /flp:FileLogger,Microsoft.Build.Engine;logfile=Build.log;errorsonly;Encoding=UTF-8
- BuildConsole Test.sln /prj="*" /rebuild /cfg="Debug|win32,Release|win32" /Log=Build.log /All
- IF %ERRORLEVEL% NEQ 0 pause
打完收工~~