【发布时间】:2015-08-08 10:26:14
【问题描述】:
我在多个目录中有很多 Visual Studio 项目解决方案(都带有 .sln 扩展名),我想编写一个简单的批处理脚本来自动构建批处理文件中列出的所有解决方案。
我可以通过启动 Visual Studio Command Prompt 手动构建解决方案(这只是一个执行以下命令的命令行实例
"%comspec%" /k "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
然后我通过调用来构建项目:
devenv "path\to\solutionFile\projectSolution1.sln" /build Debug
这将构建项目(假设项目没有错误),然后我冲洗并重复每个我想要构建的项目。
但是当我在名为 build.bat 的批处理文件中有以下内容时:
"%comspec%" /k "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
echo "Starting Build for all Projects with proposed changes"
echo .
devenv "path\to\solutionFile\projectSolution2.sln" /build Debug
devenv "another\path\to\solutionFile\projectSolution3.sln" /build Debug
devenv "yet\another\path\to\solutionFile\projectSolution4.sln" /build Debug
echo "All builds completed."
pause
批处理脚本只执行第一行,并等到我输入exit 后再执行其他脚本。根据我对批处理文件和所有 StackOverflow 问题所做的研究,我对此的理解是 cmd 实际上调用了它自己的另一个实例,该实例执行 vcvarsall.bat 来设置构建环境。
这将不起作用,因为键入 exit 会在设置了 devenv 的情况下杀死该实例,并且之后的命令无法执行,因为 devenv 不是可识别的命令(因为导出的路径将不再存在)
简而言之,如何在单个批处理文件中实现(将其余命令传递给定义了devenv 的cmd 实例)?我知道这不是一种调用构建的可靠方式(并且有很多工具可以做到这一点),但我只是希望有一个批处理脚本来自动化单独调用这些项目的手动工作。
【问题讨论】:
标签: batch-file visual-studio-2012 cmd build-script