0

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

在不使用项目参考的情况下设置构建顺序

正如@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." 

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

4

1 回答 1

1

在构建事件中执行 bat 文件得到错误“错误 MSB3073:命令”调用“MyTest.bat”退出,代码为 1。”

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

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

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

因此会产生一个无限循环,这就是为什么我们在构建事件中的一个命令行出现 30 多个错误的原因。

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

在此处输入图像描述

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

于 2018-01-08T09:49:22.657 回答