如何在MSVS Dev提示符之外运行MSBuild?

时间:2018-01-30 04:09:17

标签: c++ visual-studio msbuild visual-studio-2017

我最近一直忙着为我一直在设计的代码库制作正确的构建脚本,并一直坚持让MSBuild为我的Windows版本正确编译。我试图做的是从批处理脚本调用MSBuild而不打开Visual Studio IDE,如果我没有从Visual Studio的Developer Command Prompt执行它,它似乎经常这样做。我的脚本很简单,只需调用

start C:\Program Files (x86)\...\MSBuild\15.0\Bin\MSBuild.exe <Project>.sln

除了标记到其末尾的其他一些说明符之外,这是我尝试用来运行Windows版本的内容。这里的问题是,每当在VS Dev Prompt之外调用此代码时,Visual Studio本身就会打开,而根本不构建代码。我无法找到其他人在同一个问题上苦苦挣扎,因为它似乎是MSBuild和Visual Studio集成的新手。使用旧版本的MSBuild进行测试表明我可以在Dev Prompt之外构建项目。我可能会遗漏Dev Devmpt中提供的一些环境变量,它会改变可执行行为吗?我似乎无法找到任何可以改变这种情况的可执行说明符。

也许我对这个问题采取了完全错误的方法?我的最终目标是为消费者提供一系列构建脚本,针对他们所定位的每个平台,我非常愿意接受其他解决方案。

2 个答案:

答案 0 :(得分:1)

规范回答:

您可以将devenv命令与/ build命令行选项和项目文件的名称一起使用。

或者,您可以运行其中一个vcvars * .bat脚本来设置必要的环境,然后使用msbuild。

有关详细信息,请参阅https://docs.microsoft.com/en-gb/cpp/build/building-on-the-command-line

更新:与上面的官方建议相反,这可以在我的笔记本电脑上使用VS2017社区版。

  1. 通过运行“VS2017的开发人员命令提示符”所针对的bat文件来设置环境。 (右键单击开始菜单中的,然后选择“打开文件位置”,然后右键单击快捷方式并选择“属性”。对我来说是“C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017” \社区\ Common7 \工具\ VsDevCmd.bat”。

    您应该从构建脚本中调用此文件。

  2. cd到您的项目目录,然后像这样使用msbuild:

    msbuild My-project.vcxproj /p:Configuration=Release

  3. 出于一些非常奇怪的原因,如果我打开官方开发人员命令提示符,我可以使用devenv方法,但是即使设置了环境变量,也可以从其他命令提示符启动devenv。 (我甚至比较了两个命令提示中的环境变量集,它们是相同的。)

答案 1 :(得分:1)

  

如何在MSVS Dev Prompt之外运行MSBuild?

如果未正确设置必要的环境,则构建命令变为&#34; mysolution.sln&#34 ;.执行它确实启动VS.因此,您应该运行vcvars*.bat脚本来设置必要的环境,然后使用msbuild。以下是我的批处理脚本,它已经工作了一段时间,你可以查看它:

@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\Admin\Source\repos\MyTestProject\MyTestProject.sln"
pause
echo "All builds completed." 

以下是测试样本结果:

enter image description here

有关详细信息,请参阅How to create a Simple Build Script for Visual Studio from the Command Line?