visual-studio-2010 - PostBuildEvent 多脚本错误处理

标签 visual-studio-2010 visual-studio batch-file error-handling post-build-event

在我的 PostBuildEvent 中,为了方便起见(编辑、源代码控制等),我调用 .bat 文件:

call "$(ProjectDir)..\SolutionItems\PostBuild.bat" "$(ProjectDir)" $(ConfigurationName)

PostBuild.bat:

echo ProjectDir: %~1 ConfigurationName: %2

rem echo "copy stuff"
rem robocopy "%~1..\SolutionItems\SomeFolder" "%~1\Bin" *.lic /v /PURGE

....

echo "compile js"
"%~1..\SolutionItems\Javascript\BuildJs.bat" "%~1"

BuildJs.bat:

rem compile public js
call "C:\Program Files\Java\jre6\bin\java.exe" -jar "%~1..\SolutionItems\Javascript\compiler.jar" --js "%~1Js\Common.js" --js_output_file  "%~1Js\Public.min.js" --create_source_map "%~1Js\Public.min.js.map" --source_map_format=V3 --compilation_level SIMPLE_OPTIMIZATIONS --summary_detail_level 3 --externs "%~1..\SolutionItems\Javascript\jquery-1.9.js"
rem compile admin js
call "C:\Program Files\Java\jre6\bin\java.exe" -jar "%~1..\SolutionItems\Javascript\compiler.jar" --js "%~1Js\Common.js" --js "%~1Admin\assets\js\admin.js" --js_output_file  "%~1Admin\Assets\Js\Admin.min.js" --create_source_map "%~1Js\Admin.min.js.map" --source_map_format=V3 --compilation_level SIMPLE_OPTIMIZATIONS --summary_detail_level 3 --externs "%~1..\SolutionItems\Javascript\jquery-1.9.js"

如果 BuildJs.bat 中的第一次调用失败,它将被第二次调用吞没,并且 VisualStudio 不会显示任何错误(您只能在输出窗口中看到它)并且构建成功。

我发现的唯一解决方法是这样处理%ERRORLEVEL%:

rem compile public js
call "C:\Program Files\Java\jre6\bin\java.exe" -jar "%~1..\SolutionItems\Javascript\compiler.jar" --js "%~1Js\Common.js" --js_output_file  "%~1Js\Public.min.js" --create_source_map "%~1Js\Public.min.js.map" --source_map_format=V3 --compilation_level SIMPLE_OPTIMIZATIONS --summary_detail_level 3 --externs "%~1..\SolutionItems\Javascript\jquery-1.8.js"
IF NOT %ERRORLEVEL% == 0 GOTO END
rem compile admin js
call "C:\Program Files\Java\jre6\bin\java.exe" -jar "%~1..\SolutionItems\Javascript\compiler.jar" --js "%~1Js\Common.js" --js "%~1Admin\assets\js\admin.js" --js_output_file  "%~1Admin\Assets\Js\Admin.min.js" --create_source_map "%~1Js\Admin.min.js.map" --source_map_format=V3 --compilation_level SIMPLE_OPTIMIZATIONS --summary_detail_level 3 --externs "%~1..\SolutionItems\Javascript\jquery-1.9.js"
:END

我真的不喜欢这个解决方案,因为您必须为任何新行添加 IF NOT %ERRORLEVEL% == 0 GOTO END:还有其他解决方案吗?

-----------------更新----------------------

我按照 jeb 更新了我的脚本建议。

set "param1=%~1"
set "lastError=0"    

echo compile public js
call :javaCaller --js_output_file "%~1Js\Public.min.js" --create_source_map "%~1Js\Public.min.js.map"
echo compile admin js
call :javaCaller --js "%~1Admin\assets\js\admin.js" --js_output_file  "%~1Admin\Assets\Js\Admin.min.js" --create_source_map "%~1Js\Admin.min.js.map"
GOTO EXIT
    
:javaCaller
if %lastError% GTR 0 GOTO EXIT
call "C:\Program Files\Java\jre6\bin\java.exe" -jar "%param1%..\SolutionItems\Javascript\compiler.jar" --js "%param1%Js\Common.js" %*  --source_map_format=V3 --compilation_level SIMPLE_OPTIMIZATIONS --summary_detail_level 3 --externs "%param1%..\SolutionItems\Javascript\jquery-1.9.js"
set "lastError=%errorlevel%"

:EXIT
exit /b %lastError%

最佳答案

您可以创建一个包装函数来为您完成此操作,这也可以简化您的其他行。

BuildJs.bat:

set "param1=%~1"
set "lastError=0"

rem compile public js
call :javaCaller --js_output_file  "%~1Js\Public.min.js" --create_source_map "%~1Js\Public.min.js.map"
rem compile admin js
call :javaCaller --js "%~1Admin\assets\js\admin.js" --js_output_file  "%~1Admin\Assets\Js\Admin.min.js" --create_source_map "%~1Js\Admin.min.js.map"
exit /b %lastError%

:javaCaller
if %lastError% GTR 0 exit /b
call "C:\Program Files\Java\jre6\bin\java.exe" -jar "%param1%..\SolutionItems\Javascript\compiler.jar" --js "%param1%Js\Common.js" %*  --source_map_format=V3 --compilation_level SIMPLE_OPTIMIZATIONS --summary_detail_level 3 --externs "%~1..\SolutionItems\Javascript\jquery-1.9.js"
set "lastError=%errorlevel%"
exit /b

关于visual-studio-2010 - PostBuildEvent 多脚本错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19358890/

相关文章:

visual-studio-2010 - 如何自动重构我的类以使用它们所在文件夹的默认命名空间?

batch-file - 将多个命令结果保存到txt文件

batch-file - 如何在不使用批处理文件一一声明的情况下检索包含许多子文件夹的目录中的文件?

windows - Windows XP 上的兼容性和性能 Visual Studio 2012

visual-studio-2010 - 搜索整个项目

visual-studio - 尝试从 Visual Studio 连接时,具有 MFA 支持的 Active Directory Universal 不可用

wpf - 在 VS 2010 中禁用 WPF 设计器?

windows - 检查 Web 服务器并且不从同一服务器上的配置文件解析端口 80 和端口 8080

C++:如何将 ASCII 或 ANSI 转换为 UTF8 并存储在 std::string 中

c# - DateTime 格式注释不适用于 Visual Studio 中的 Vue 应用程序