2025-04-17 05:00:02

MSBuild路径

如何以编程方式从正在运行.exe的机器获取到MSBuild的路径?

我可以从环境中获得。net版本,但是是否有一种方法可以获得。net版本的正确文件夹?


当前回答

如果你想在。net 4中使用MSBuild,那么你可以使用下面的PowerShell命令来获取可执行文件的路径。如果您想要2.0或3.5版本,只需更改$dotNetVersion变量。

要运行可执行文件,您需要在$msbuild变量前面加上&。这将执行变量。

# valid versions are [2.0, 3.5, 4.0]
$dotNetVersion = "4.0"
$regKey = "HKLM:\software\Microsoft\MSBuild\ToolsVersions\$dotNetVersion"
$regProperty = "MSBuildToolsPath"

$msbuildExe = join-path -path (Get-ItemProperty $regKey).$regProperty -childpath "msbuild.exe"

&$msbuildExe

其他回答

在Windows 2003及更高版本上,在cmd中键入以下命令:

cmd> where MSBuild
Sample result: C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe

如果没有显示,则意味着. net框架没有包含在系统PATH中。MSBuild应该和。net编译器(vbc.exe, csc.exe)一起放在。net安装文件夹中。

翻了翻登记表,看起来

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\2.0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\3.5
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0

也许是你想要的;打开regedit.exe,看一看。

通过命令行查询(由Nikolay Botev提供)

reg.exe query "HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0" /v MSBuildToolsPath

通过PowerShell查询(每个MovGP0)

dir HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\

本处地点

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\2.0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\3.5

给出可执行文件的位置。

但如果你需要保存任务扩展的位置,它是打开的

%ProgramFiles%\MSBuild

查找MSBuild的说明:

PowerShell: &"${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * - required Microsoft. component .MSBuild -find MSBuild\**\Bin\MSBuild.exe CMD: "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -pre - release -products * - required Microsoft. component .MSBuild -find MSBuild\**\Bin\MSBuild.exe

查找VSTest的说明:

PowerShell: &"${env:ProgramFiles(x86)}\Microsoft VisualStudio \Installer\ vvswhere .exe" -latest -pre - release -products * -需要Microsoft. visualstudio . packagegroup . testtools . core -查找Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe CMD: "%ProgramFiles(x86)%\Microsoft VisualStudio \Installer\ vvswhere .exe" -latest -pre - release -products * - required Microsoft. visualstudio . packagegroup . testtools . core -find Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe

(请注意,上面的说明与微软的官方说明略有不同。特别地,我已经包含了-pre - release标志来允许预览和RC安装,以及-products *来检测Visual Studio Build Tools安装。)


这只花了两年多的时间,但最终在2019年,微软听取了我们的意见,并为我们提供了一种找到这些重要可执行文件的方法!如果你安装了Visual Studio 2017和/或2019,vwhere实用程序可以查询MSBuild等的位置。由于vswhere被Microsoft保证位于%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe,因此不再需要引导和路径硬编码。

神奇的是-find形参,它是在2.6.2版本中添加的。您可以通过运行vwhere或检查其文件属性来确定已安装的版本。如果您有较旧的版本,您可以下载最新的版本并覆盖现有的%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe。

Vswhere.exe是一个独立的可执行文件,因此您可以从任何有互联网连接的地方下载并运行它。这意味着您的构建脚本可以检查它们所运行的环境是否设置正确(举个例子)。

如果你已经安装了Chocolatey,你也可以使用相关的vwhere包。

这适用于Visual Studio 2015和2017:

function Get-MSBuild-Path {

    $vs14key = "HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0"
    $vs15key = "HKLM:\SOFTWARE\wow6432node\Microsoft\VisualStudio\SxS\VS7"

    $msbuildPath = ""

    if (Test-Path $vs14key) {
        $key = Get-ItemProperty $vs14key
        $subkey = $key.MSBuildToolsPath
        if ($subkey) {
            $msbuildPath = Join-Path $subkey "msbuild.exe"
        }
    }

    if (Test-Path $vs15key) {
        $key = Get-ItemProperty $vs15key
        $subkey = $key."15.0"
        if ($subkey) {
            $msbuildPath = Join-Path $subkey "MSBuild\15.0\bin\amd64\msbuild.exe"
        }
    }

    return $msbuildPath

}