Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在MSVS Dev提示符之外运行MSBuild?_C++_Visual Studio_Msbuild_Visual Studio 2017 - Fatal编程技术网

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

C++ 如何在MSVS Dev提示符之外运行MSBuild?,c++,visual-studio,msbuild,visual-studio-2017,C++,Visual Studio,Msbuild,Visual Studio 2017,我最近一直忙着为我一直在设计的代码库编写适当的构建脚本,一直在为我的Windows构建正确编译MSBuild。我试图做的是从批处理脚本调用MSBuild,而不打开Visual Studio IDE,如果我不是在Visual Studio的开发人员命令提示符下执行它,它似乎会一直这样做。我的脚本很简单,只需调用 start C:\Program Files (x86)\...\MSBuild\15.0\Bin\MSBuild.exe <Project>.sln start C:\Pr

我最近一直忙着为我一直在设计的代码库编写适当的构建脚本,一直在为我的Windows构建正确编译MSBuild。我试图做的是从批处理脚本调用MSBuild,而不打开Visual Studio IDE,如果我不是在Visual Studio的开发人员命令提示符下执行它,它似乎会一直这样做。我的脚本很简单,只需调用

start C:\Program Files (x86)\...\MSBuild\15.0\Bin\MSBuild.exe <Project>.sln
start C:\Program Files(x86)\…\MSBuild\15.0\Bin\MSBuild.exe.sln
除了在它的末尾添加了一些其他的说明符之外,这就是我试图用来运行Windows构建的东西。这里的问题是,每当在VS Dev提示符之外调用此代码时,VisualStudio本身就会打开,而不是构建代码。我也找不到其他人在为同样的问题而挣扎,因为这似乎是MSBuild和VisualStudio集成的新问题。使用旧版本的MSBuild进行测试表明,我可以在Dev提示符之外按照自己的意愿构建项目。我可能缺少在Dev提示符中提供的一些环境变量,这些变量会改变可执行文件的行为吗?我似乎也找不到任何可以改变这一点的可执行说明符


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

标准答案:

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

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

有关详细信息,请参阅

更新:与上面的官方建议相反,这是VS2017社区版适用于我的笔记本电脑的功能

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

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

  • 将cd复制到项目目录,然后按如下方式使用msbuild:

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

  • 出于某种非常奇怪的原因,如果我打开官方的开发者命令提示符,但从另一个命令提示符启动devenv,即使设置了环境变量,也没有任何作用,那么我可以使用devenv方法(我甚至比较了两个命令提示符中的环境变量集,它们是相等的)

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

    如果必要的环境设置不正确,则build命令变为“
    mysolution.sln
    ”。执行它确实会启动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." 
    
    以下是测试样本结果:


    有关更多详细信息,请参阅。

    我尝试了列出的两种方法,但肯定是做错了什么。在MSBuild之前运行
    调用…\vcvars64.bat
    似乎没有效果,而
    启动…\devenv.exe Proj.sln/build Release
    只会打开IDE,而不会生成代码。是否需要在生成服务器上运行该脚本安装了Visual Studio吗?@VladimirSerykh不,我要求构建平台安装了Visual Studio。为什么?看起来不正确。