在构建事件中执行 bat 文件得到错误 "error MSB3073: The command "调用 "MyTest.bat" 退出代码 1。”

Execute bat file in the build event got the error "error MSB3073: The command "call "MyTest.bat" exited with code 1."

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

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

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

call "$(ProjectDir)\MyTest.bat"

我收到这个错误:

C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\MSBuild.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 Studio17\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." 

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

Execute bat file in the build event got the error “error MSB3073: The command ”call “MyTest.bat” exited with code 1."

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

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

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

所以会产生一个无限循环,这就是我们在构建事件中一个命令行得到超过 30 个错误的原因。

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

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