在devenv.exe返回

时间:2018-08-15 02:42:40

标签: visual-studio batch-file visual-studio-2017

我有一个.bat文件,其中包含以下两个命令:

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Tools\..\IDE\devenv" plugin\proj1-vs15.sln /rebuild "Release" /project plugin\proj1-vs15.vcxproj /projectconfig "Release|x64"  1>vcbuild.log 2>&1

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Tools\..\IDE\devenv" plugin\proj2-vs15.sln /rebuild "Release" /project plugin\proj2-vs15.vcxproj /projectconfig "Release|x64"  1>vcbuild.log 2>&1

第一个命令成功完成,但是第二个命令立即失败,并显示消息“该进程无法访问文件,因为该文件正在被另一个进程使用。”

如果我在第二个命令中为重定向输出使用了不同的文件名,则两个命令都将正确完成。

Visual Studio 2015或任何早期版本都没有这个问题,只有VS 2017。

为什么在第一个devenv命令完成后重定向的输出文件仍保持打开状态?

在我的实际用例中,每次执行devenv.exe时,对于重定向输出使用不同的文件名将很不方便。有什么方法可以确保在.bat文件前进到下一个命令之前关闭输出文件?

1 个答案:

答案 0 :(得分:1)

devenv产生的任何子进程都将继承重定向句柄,因此,如果debenv返回其子进程中的任何子进程仍处于打开状态,则文件将保持锁定状态,因此CMD无法第二次打开vcbuild.log文件。解决方案是将两个构建命令都放在重定向的复合块中。

(
    devenv <First Project Arguments>
    devenv <Second Project Arguments>
)>"vcbuild.log" 2>&1