如何解析 dnvm 列表

How to parse dnvm list

如何以编程方式确定当前活动的 dotnet 版本?我可以 运行 dnvm list,但我终其一生都无法将输出传输到变量、文件、字符串……似乎没有任何效果,我不明白为什么。

dnvm list > currentList.txt

导致输出仍然显示在控制台上,没有任何内容重定向到文件。

它似乎没有写入 StdErr - 2>&1 没有改变任何东西...

如果有人甚至可以提供一些关于为什么这行不通的见解,我们将不胜感激。 是否有一种 Powershell 方法可以正确查询我所缺少的?

dnx 和 dnvm 消失了,dotnet 使用不同的模型。没有 'active' 运行 时间了。现在 运行 编译应用程序的时间将用于 运行 应用程序。

在您的 $env:UserProfile\.dnx\bin 文件夹中,您会找到一个 dnvm.ps1 脚本。对此进行分析,您可以从控制台帮助中看到不明显的地方 - 它只是一个委托给此 ps1 脚本的命令文件 - 任何函数参数都可以从命令行传递,而命令只会传递他们直接进入 PowerShell。所以你可以这样做:

#This is the version we're looking to run against
$required = @{
    Version = "1.0.0-rc1-update2";
    Architecture = "x64";
    Runtime = "clr";
    OperatingSystem = "win"
}

#Check to see if the version we need is installed...
$installed = (dnvm list -PassThru | ? { 
    $_.Version -eq $required.Version -and 
    $_.Architecture -eq $required.Architecture -and 
    $_.Runtime -eq $required.Runtime -and 
    $_.OperatingSystem -eq $required.OperatingSystem
})

if ($installed -eq $null) {
    # The version we require isn't installed... 
    #   ...installing it will set it as active
    dnvm install -VersionNuPkgOrAlias $required.Version `
                 -Architecture $required.Architecture `
                 -Runtime $required.Runtime `
                 -OS $required.OperatingSystem
}
elseif (!$installed.Active) {
    # The version we require is already installed...
    #  ...just set it active
    dnvm use -VersionOrAlias $required.Version `
             -Architecture $required.Architecture `
             -Runtime $required.Runtime `
             -OS $required.OperatingSystem
}