2016-07-07 15 views
1

Wie ermittelt man die aktuell aktive dotnet-Version? Ich kann dnvm Liste laufen lassen, aber kann nicht für das Leben von mir es bekommen, um Ausgabe auf eine Variable, eine Akte, eine Schnur zu übertragen ... nichts scheint zu arbeiten und ich kann nicht warum ergründen.So analysieren Sie die dnvm-Liste

führt dazu, dass die Ausgabe immer noch an der Konsole angezeigt wird und nichts in die Datei umgeleitet wird.

Es scheint nicht zu StdErr zu schreiben - 2> & 1 ändert nichts ...

Wenn jemand auch nur einen kleinen Einblick in das, könnte, warum dies nicht funktionieren, wäre es viel zu sein geschätzt. Gibt es eine Powershell-Art, diese richtig abzufragen, die ich vermisse?

+0

Nur um zu klären: Sie wollen [Abrufen der Versionen von '.Net' verfügbar] (http://stackoverflow.com/a/3495491/2486496) oder tun Sie wollen die Ausgabe von 'dnvm list' richtig piped anstatt über die Konsole angezeigt werden? – gravity

+0

Nun, ich muss in der Lage sein, programmatisch festzustellen, ob die Version, für die das Build bestimmt ist, installiert ist und aktuell aktiv ist, und wenn nicht, mach es so ... automatisch. Also ... wie das passiert, ist für mich ganz gleichgültig, nur dass es passiert. Wenn es in Powershell einen geeigneteren Weg dafür gibt, nehme ich diesen Weg gerne an. – BenAlabaster

Antwort

1

In Ihrem $ env: UserProfile \ .dnx \ bin-Ordner finden Sie ein dnvm.ps1-Skript. Wenn Sie dies analysieren, können Sie anhand der Konsolenhilfe sehen, was nicht offensichtlich ist - es handelt sich lediglich um eine Befehlsdatei, die an dieses ps1-Skript delegiert. Jedes der Funktionsargumente kann von der Befehlszeile übergeben werden und der Befehl reicht sie einfach weiter Power Shell. So können Sie etwas tun:

#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 und dnvm sind weg und dotnet verwendet ein anderes Modell. Es gibt keine 'aktive' Laufzeit mehr. Jetzt wird die Laufzeit, für die die Anwendung kompiliert wurde, zum Ausführen der Anwendung verwendet.

+0

Das beantwortet meine Frage nicht, aus verschiedenen Gründen sind wir im Moment mit dnx und daher mit dnvm festgefahren, weil die Treiber für andere Software von Drittanbietern, die wir brauchen, noch nicht für dotnet core aktualisiert wurden. – BenAlabaster

+0

Wenn Sie Drittanbieterbibliotheken mit dnx verwenden können, sollten Sie sie in .NET Core verwenden können. Wenn das Problem darin besteht, dass sie dnxcore50 als Ziel haben, brauchen Sie nur 'Imports'. Wenn sie dnx451 als Ziel haben, können Sie auch .NET Framework in .NET Core-Projekten verwenden. Wenn das etwas anderes ist, würde ich es gerne wissen. – Pawel

Verwandte Themen