gpt4 book ai didi

powershell - 使用Powershell找到MSTest.exe

转载 作者:行者123 更新时间:2023-12-02 23:43:06 25 4
gpt4 key购买 nike

我正在将.Net解决方案构建自动化以完全在PowerShell中。我想使用PowerShell找到MSTest.exe。

我使用以下脚本定位MSBuild.exe,希望我可以找到类似于MSTest.exe的东西。

$msBuildQueryResult = reg.exe query "HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0" /v MSBuildToolsPath
$msBuildQueryResult = $msBuildQueryResult[2]
$msBuildQueryResult = $msBuildQueryResult.Split(" ")
$msBuildLocation = $msBuildQueryResult[12] + "MSBuild.exe"

有方向吗?

最佳答案

以下适用于 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')

该方法基于 this answer并被推广并适用于PowerShell。
  • 它基于由Visual Studio安装程序创建的系统环境变量VS*COMNTOOLS,其中*代表VS版本号(例如VS 2010的100)。
  • Re选项A:Sort-Object用于确保以最新的Visual Studio安装为目标,如果同时安装多个安装:
  • 用于排序的脚本块首先仅从变量名称中提取嵌入式版本号($_.Name -replace '[^\d]';例如,100中的VS100COMNTOOLS),然后将结果转换为整数([int]);然后[-1]从排序后的数组中提取最后一个元素-即其名称具有最高嵌入式版本号的变量对象-并访问其值(.Value)。
  • IDE所在的MSTest.exe子文件夹是VS*COMNTOOLS指向的tools文件夹的同级文件夹。
  • 如果MSTest.exe不在预期的位置,默认情况下Convert-Path将抛出一个非终止错误;添加-EA Stop(-ErrorAction Stop的缩写)可确保脚本被中止。


  • [1]
    -我已经尝试过Visual Studio 2015;让我知道它是否适用于更高版本。
    -潜在地也可以与VS 2008一起使用。

    关于powershell - 使用Powershell找到MSTest.exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35301539/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com