VS2017中msbuild的不同路径

use*_*453 4 msbuild visual-studio visual-studio-2017

OS: Microsoft Windows [Version 10.0.14393]

VS-版本: 2017 Community

当我运行时,vswhere.exe我得到以下回复,并根据官方vswhere 文档,我可以建立路径msbuild,这似乎工作:

C:\Users\user\Desktop>"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"
Visual Studio Locator version 1.0.62 [query version 1.10.80.60812]
Copyright (C) Microsoft Corporation. All rights reserved.
[...]
installationPath: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community
[...]
C:\Users\user\Desktop>"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe"
Microsoft (R)-Buildmodul, Version 15.1.1012.6693
Run Code Online (Sandbox Code Playgroud)

如果我启动位于的开发人员命令提示符,"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsMSBuildCmd.bat"我会得到以下结果:

C:\Users\user>"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsMSBuildCmd.bat"
**********************************************************************
** Visual Studio 2017 MSBuild Command Prompt
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
C:\Users\user>where msbuild
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
Run Code Online (Sandbox Code Playgroud)
  1. 为什么以及启动开发人员命令提示符后返回的第二个路径是什么
  2. 我总是使用第一个path("C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe")来调用msbuild构建C/C++/VC++项目.这有点错吗?

Mar*_*ich 5

VS 2017切换到msbuild的本地副本,如果您使用VS 2015命令提示符,您将看到不同的全局路径.

where命令列出了它在其上找到的所有匹配的可执行文件PATH,但在运行msbuild命令时,命令提示符仅使用第一个.

msbuild.exe您看到的第二个是.NET Framework的一部分 - 这是MSBuild的一个版本,它作为.NET Framework的一部分集成并提供.与最新版本的Visual Studio安装的版本相比,此版本较旧.但出于兼容性原因,它可能会继续包含在.NET Framework中.它甚至可以构建许多项目,然后使用VS安装的目标和任务 - 只需要更改MSBuild本身的项目格式更改将是不兼容的(如用于.NET Core项目的新项目格式).

您应该始终使用VS 2017版本msbuild.exe来始终获得与visual studio一致的构建结果.