Dan*_*nov 8 msbuild batch-file msbuild-task
我有一个批处理文件,使用该exit
命令返回退出代码.
在某些情况下,可以从命令行交互地调用此批处理文件,或者在其他情况下,可以使用该Exec
任务作为MSBuild项目的一部分运行该批处理文件.
exit %errorlevel%
在我的批处理文件中使用这很好,并且MSBuild看到错误代码,但是在这种情况下,从命令窗口运行批处理文件的交互式用户将获得cmd.exe的粗略退出.exit /b %errorlevel%
交互式场景没有得到粗鲁的退出,但这也意味着cmd
我的Exec
任务启动也没有退出,因此MSBuild没有看到返回值.作为这两个问题的解决方案,我试图使用exit /b
但是从我的构建脚本中启动批处理文件,如下所示:
<Exec Command="Batch.cmd params & exit %errorlevel%" />
Run Code Online (Sandbox Code Playgroud)
这个想法是我明确地从'非终端'返回exit /b
并手动调用exit
以cmd.exe
在Exec
Build Task可以看到它之外传播这个值.
这似乎是完美的解决方案,但它不起作用.Exec
仍然没有得到正确的错误值.
Say*_*imi 13
处理此问题的一种方法是让MSBuild将参数传递给批处理文件,以便它知道MSBuild正在调用它而不是从命令提示符调用它.例如,我创建了如下所示的示例文件test.bat
ECHO OFF
IF (%1)==() goto Start
SET fromMSBuild=1
:Start
ECHO fromMSBuild:%fromMSBuild%
REM ***** Perform your actions here *****
set theExitCode=101
GOTO End
:End
IF %fromMSBuild%==1 exit %theExitCode%
REM **** Not from MSBuild ****
ECHO Exiting with exit code %theExitCode%
exit /b %theExitCode%
Run Code Online (Sandbox Code Playgroud)
我已经创建了MSBuild文件wrapper.proj,它是:
<Project DefaultTargets="Demo" ToolsVersion="3.5"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<BatchFile>test.bat</BatchFile>
<FromMSBuild>FromMSBuild</FromMSBuild>
</PropertyGroup>
<Target Name="Demo">
<Message Text="Executing batch file $(BatchFile)" Importance="high"/>
<PropertyGroup>
<_Command>$(BatchFile) $(FromMSBuild)</_Command>
</PropertyGroup>
<Exec Command="$(_Command)">
<Output PropertyName="CommandExitCode" TaskParameter="ExitCode"/>
</Exec>
<Message Text="CommandExitCode: $(CommandExitCode)"/>
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
如果从命令提示符执行文件test.bat,则结果为
C:\Data\Development\My Code\Community\MSBuild\BatchFile>test.bat
C:\Data\Development\My Code\Community\MSBuild\BatchFile>ECHO OFF
fromMSBuild:0
Exiting with exit code 101
Run Code Online (Sandbox Code Playgroud)
从MSBuild得到的结果是:
C:\Data\Development\My Code\Community\MSBuild\BatchFile>msbuild Wrapper.proj /t:Demo /fl /nologo
Build started 5/18/2009 10:54:52 PM.
Project "C:\Data\Development\My Code\Community\MSBuild\BatchFile\Wrapper.proj" on node 0 (Demo target(s)).
Executing batch file test.bat
fromMSBuild:1
C:\Data\Development\My Code\Community\MSBuild\BatchFile\Wrapper.proj(17,5): error MSB3073: The command "test.bat FromMSBuild" exi
ted with code 101.
Done Building Project "C:\Data\Development\My Code\Community\MSBuild\BatchFile\Wrapper.proj" (Demo target(s)) -- FAILED.
Build FAILED.
"C:\Data\Development\My Code\Community\MSBuild\BatchFile\Wrapper.proj" (Demo target) (1) ->
(Demo target) ->
C:\Data\Development\My Code\Community\MSBuild\BatchFile\Wrapper.proj(17,5): error MSB3073: The command "test.bat FromMSBuild" e
xited with code 101.
0 Warning(s)
1 Error(s)
Time Elapsed 00:00:00.06
Run Code Online (Sandbox Code Playgroud)
Sayed Ibrahim Hashimi
我的书:Microsoft Build Engine内部:使用MSBuild和Team Foundation Build
归档时间: |
|
查看次数: |
8744 次 |
最近记录: |