2016-07-07 69 views
1

如何以編程方式確定當前活動的dotnet版本?我可以運行dnvm列表,但不能爲我的生活得到它將輸出轉移到一個變量,文件,字符串......沒有任何工作,我無法理解爲什麼。如何解析dnvm列表

dnvm list > currentList.txt 

導致輸出仍在控制檯上顯示,沒有任何重定向到文件。

它似乎並沒有被寫入標準錯誤 - 2> & 1不會改變任何東西......

如果還有人甚至可以提供一些見解,爲什麼這是行不通的,這將是更讚賞。 有沒有PowerShell的方式來正確查詢這個,我錯過了?

+0

只是爲了澄清:你想[檢索.Net'可用的'版本(http://stackoverflow.com/a/3495491/2486496),或做你想得到'dnvm list'的輸出正確,而不是通過控制檯顯示? – gravity

+0

嗯,我需要能夠以編程方式確定構建版本的目標版本是否已安裝並且當前已設置爲活動版本,如果沒有,請自動創建它。所以......發生這種事情對我來說是非常不重要的,只是發生了。如果在Powershell中有更合適的方法,我很樂意採用這種方式。 – BenAlabaster

回答

1

在您的$ env:UserProfile \ .dnx \ bin文件夾中,您將找到一個dnvm.ps1腳本。通過分析這個,你可以看到控制檯幫助中不明顯的東西 - 它只是一個委託給這個ps1腳本的命令文件 - 任何函數參數都可以從命令行傳遞,命令會將它們傳遞給電源外殼。所以,你可以做這樣的事情:

#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 
} 
-1

dnx和dnvm消失,dotnet使用不同的模型。沒有'活躍'的運行時間了。現在編譯應用程序的運行時將用於運行應用程序。

+0

由於各種原因,這並沒有回答我的問題,因爲我們需要的其他第三方軟件的驅動程序尚未針對dotnet內核進行更新,所以我們暫時用dnx和dnvm卡住。 – BenAlabaster

+0

如果你可以在dnx上使用第三方庫,你應該可以在.NET Core中使用它們。如果問題在於他們針對的是dnxcore50,那麼您只需要'imports'。如果他們的目標是dnx451,那麼您也可以在.NET Core項目中使用目標完整的.NET Framework。如果這是不同的,我會有興趣知道。 – Pawel