代码之家  ›  专栏  ›  技术社区  ›  user9119028

在生成事件中执行bat文件时,出现错误“error MSB3073:call”MyTest.bat“命令已退出,代码为1。"

  •  0
  • user9119028  · 技术社区  · 7 年前

    在我们的解决方案中,我们有150多个项目,我需要先构建一个项目,但我不想为100多个项目逐个设置项目引用或项目依赖项。这是浪费时间。所以在这之前我问了以下问题:

    Set build order without using project reference

    正如@Leo Liu建议我可以先使用批处理文件来构建项目,这应该是一个有效的解决方法。作为优化,我希望在该项目的构建事件中设置此bat文件,以便我只需要构建该项目,而不需要从外部手动运行bat文件。

    但是,当我使用以下生成事件生成该项目时:

    call "$(ProjectDir)\MyTest.bat"
    

    我遇到了以下错误:

    C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\bin\Microsoft.Common.CurrentVersion.targets(5074,5): error MSB3073: The command "call "C:\Users\Myname\Source\repos\MysolutionName\GenerateFile\MyTest.bat"" exited with code 1. [C:\Users\\Source\repos\MysolutionName\GenerateFile\GenerateFile.csproj]
    

    更新: bat文件中的脚本为:

    @echo OFF 
    call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsDevCmd.bat"
    echo "Starting Build for all Projects with proposed changes"
    MSBuild.exe "C:\Users\MyName\Source\repos\MySolutionName\MySolutionName.sln"
    pause
    echo "All builds completed." 
    

    有什么建议吗?提前谢谢。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Leo Liu    7 年前

    生成事件中的Execute bat file得到错误–error MSB3073:命令–call–MyTest。bat已退出,代码为1。"

    根据您的问题,我创建了一个测试样本,得到了30多个错误,没有任何其他详细信息:

    error MSB3073: The command "call "D:\TestSample.bat"" exited with code 1.
    

    进一步的研究发现了这些错误的原因,因为您在bat文件中构建了解决方案,然后在解决方案中的一个项目的构建事件中设置了此bat文件,该项目在bat文件中调用。

    所以 将生成无限循环 ,这就是为什么在构建事件中一个命令行出现30多个错误的原因。

    要解决此问题,在使用bat文件构建解决方案时,我们不应构建指定项目,因此您可以打开Configuration Manager,取消选中生成项目的构建复选框:

    enter image description here

    使用此设置,当您使用该bat文件构建解决方案时,将忽略此项目。