Visual Studio 2012允许将MSBuild的输出记录到文件中。但是每次声明新的构建时,这个文件都会被覆盖。
如何自动备份旧的构建日志,即使从那时起触发了新构建,也可以对有问题的构建进行故障排除?
答案 0 :(得分:2)
创建一个脚本,以使用新的唯一名称复制每个构建日志。例如,使用时间戳:
@Echo off
:: BackupVSLog.bat
:: Locale-independant date adapted from: http://ss64.com/nt/syntax-getdate.html
:: Check if WMIC is available
WMIC.EXE Alias /? >NUL 2>&1 || GOTO s_error_no_wmic
:: Check if a log directory was provided
IF %1=="" GOTO s_error_no_dir
Set directory=%1
:: Check if a project name was provided
IF %2=="" GOTO s_error_no_proj
Set project=%2
:: Use WMIC to retrieve date and time
FOR /F "skip=1 tokens=1-6" %%G IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
IF "%%~L"=="" goto s_done
Set _yyyy=%%L
Set _mm=00%%J
Set _dd=00%%G
Set _hour=00%%H
SET _minute=00%%I
)
:s_done
:: Pad digits with leading zeros
Set _mm=%_mm:~-2%
Set _dd=%_dd:~-2%
Set _hour=%_hour:~-2%
Set _minute=%_minute:~-2%
:: Format the date
Set formatteddate=%_yyyy%_%_mm%_%_dd%_%_hour%_%_minute%
:: Copy the provided log, take care of whitespaces
Set "dirnoquotes=%directory:"=%"
Set "projnoquotes=%project:"=%"
Echo Copying "%dirnoquotes%%projnoquotes%.log" to "%dirnoquotes%%projnoquotes%_%formatteddate%.log".
Copy "%dirnoquotes%%projnoquotes%.log" "%dirnoquotes%%projnoquotes%_%formatteddate%.log"
GOTO:EOF
:s_error_no_wmic
Echo Error: WMIC no available.
Echo Requires Windows XP Professional, Vista, Windows 7 or Windows 8.
GOTO:EOF
:s_error_no_dir
Echo Error: Log directory not provided.
Echo Usage: BackupVSLog.bat <VSLogDir> <VSProjectName>
GOTO:EOF
:s_error_no_proj
Echo Error: Project name not provided.
Echo Usage: BackupVSLog.bat <VSLogDir> <VSProjectName>
GOTO:EOF
检查是否已启用构建日志记录:
工具&gt;选项&gt;项目和解决方案&gt; VC ++项目设置&gt;构建日志记录&gt;的是
选择记录详细程度:
工具&gt;选项&gt;项目和解决方案&gt;构建并运行&gt; MSBuild项目构建日志详细程度
将Post-Build事件添加到应保存构建日志的项目属性中:
项目属性&gt;配置属性&gt;构建活动&gt;建设后活动 &#34; C:\路径\至\ BackupVSLog.bat&#34; &#34; $(IntermediateOutputPath)&#34; &#34; $(项目名)&#34;