gpt4 book ai didi

msbuild - 遵守 msbuild 调用的批处理文件中的退出代码

转载 作者:行者123 更新时间:2023-12-04 05:44:38 28 4
gpt4 key购买 nike

我有一个使用 exit 的批处理文件命令返回退出代码。

在某些情况下,该批处理文件可以从命令行以交互方式调用,或者在其他情况下,可以使用 Exec 作为 MSBuild 项目的一部分运行。任务。

  • 如果我使用 exit %errorlevel%在我的批处理文件中,这运行良好,MSBuild 看到错误代码 然而在这种情况下,从命令窗口运行批处理文件的交互式用户将粗鲁地退出 cmd.exe。
  • 如果我使用 exit /b %errorlevel%交互式场景不会粗鲁地退出,但这也意味着 cmd由我的 Exec 发起任务也不会退出,因此 MSBuild 看不到返回值。

  • 作为这两个问题的解决方案,我正在尝试使用 exit /b但是从我的构建脚本中启动批处理文件,如下所示:
    <Exec Command="Batch.cmd params &amp; exit %errorlevel%" />

    我的想法是我明确地从 exit /b 获取“非终端”返回并手动调用 exitcmd.exe 之外传播此值 Exec Build Task 可以看到。

    这似乎是完美的解决方案,但它不起作用。 Exec仍然没有得到正确的错误值。

    最佳答案

    处理此问题的一种方法是让 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%
    我创建了 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>
    如果您从命令提示符执行文件 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
    从 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

    关于msbuild - 遵守 msbuild 调用的批处理文件中的退出代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/879023/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com