以下适用于Visual Studio 2010 及更高版本[1]:
# Get the tools folder location:
# Option A: Target the *highest version installed*:
$vsToolsDir = (
Get-Item env:VS*COMNTOOLS | Sort-Object {[int]($_.Name -replace '[^\d]')}
)[-1].Value
# Option B: Target a *specific version*; e.g., Visual Studio 2010,
# internally known as version 10.0.
# (See https://en.wikipedia.org/wiki/Microsoft_Visual_Studio#History)
$vsToolsDir = $env:VS100COMNTOOLS
# Now locate msbuild.exe in the "IDE" sibling folder.
$msTestExe = Convert-Path -EA Stop (Join-Path $vsToolsDir '..\IDE\MSTest.exe')
该方法基于此答案,并已推广并适用于 PowerShell。
它基于系统环境变量VS*COMNTOOLS
,由 Visual Studio 安装程序创建,其中*
表示 VS 版本号(例如,100
对于 VS 2010)。
- 重新选项 A:
Sort-Object
用于确保以最新的Visual Studio 安装为目标,如果并排安装多个:
- 用于排序的脚本块首先从变量名(
$_.Name -replace '[^\d]'
; 例如,100
from VS100COMNTOOLS
)中仅提取嵌入的版本号,并将结果转换为整数([int]
);[-1]
然后从排序后的数组中提取最后一个元素 - 即名称具有最高嵌入版本号的变量对象 - 并访问其值 ( .Value
)。
IDE
子文件夹所在的文件夹是所指向的工具文件夹MSTest.exe
的同级文件夹。VS*COMNTOOLS
如果不在MSTest.exe
预期位置,Convert-Path
默认会抛出非终止错误;添加-EA Stop
(简称-ErrorAction Stop
:)确保脚本被中止。
[1]
- 我已经尝试了 Visual Studio 2015;请让我知道它是否适用于更高版本。
- 可能也适用于 VS 2008。