在我的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
:还有其他任何解决方案吗?
----------------- UPDATE ----------------------
我按照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%
答案 0 :(得分:2)
您可以创建一个包装函数来为您完成,这也可以简化您的其他行。
<强> 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