2009-02-06 12 views
7

Kann PowerShell 1.0 (oder 2.0 CTP), das von der 3.5-Laufzeit unterstützt wird, anstelle von 2.0 ausgeführt werden?Verwenden von PowerShell mit .NET 3.5-Laufzeitbibliotheken

Wir bauen eine .NET 3.5-Lösung, und ich würde immer noch für geplante Aufgaben Powershell als unsere Scripting-Engine verwenden möchten, usw.

Ich brauche LINQ-Syntax oder etwas nicht, sondern nur die 3.5 Bibliotheken und Laufzeit.

FOLLOWUP: Vielen Dank für die Antwort zum dynamischen Laden von Baugruppen. Aber lassen Sie mich meine Frage klären: Gibt es eine Möglichkeit, PowerShell auszuführen, so dass die 3.5-Bibliotheken standardmäßig ausgeführt werden? Wenn ich zum Beispiel eingebe, bekomme ich eigentlich die 3.5 Version?

Semi-bezogene Frage: Wenn ich dynamisch laden zu tun haben, sagen wir, die System.Xml Bibliothek von 3,5, wird es Overlay die vorhandenen Symboldefinitionen, so dass die nächsten Mal, wenn ich New-Object System.Xml.XmlDocument geben, es wird laden Sie die Version 3.5?

Antwort

4

Solange Ihr Ihren vollständig qualifizierten Namen richtig, ich sehe nicht, warum dies nicht funktionieren würde:

[System.Reflection.Assembly]::Load("System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") 

ich Linq nur verwendet wie die erste in den Sinn kommen sollte. An diesem Punkt wird das ddl geladen, und Sie können Objekte daraus erstellen/verwenden.

+0

Ich gehe davon aus, dass, obwohl, wenn ich eine .NET 3.5-Baugruppe (einschließlich aller, die ich schreibe vielleicht) dynamisch laden, und dann ein .NET-Objekt erstellen (zB , ein System.Xml.XmlDocument) und an eine Methode in meiner Assembly übergeben, übergebe ich ein 2.0-Objekt an ein 3.5-Objekt. Hab ich recht? –

+0

Um also ein 3.5 XmlDocument zu übergeben, müsste ich die .NET 3.5 System.Xml-Bibliothek genau so importieren, wie Sie die System.Xml.Linq-Bibliothek demonstriert haben. –

+0

Ich bin keine Pro-Dev-Person, aber ich würde eher zustimmen, dass Ihre obigen Annahmen richtig sind. –

3

PowerShell wurde gegen 2.0 gebaut, so dass Sie keine Optionen haben, aber mindestens 2.0 vorhanden. Aber wie James sagt, können Sie 3.0 und 3.5 Funktionalität laden, indem Sie die entsprechende Assembly laden. LINQ ist ein gutes Beispiel von 3.5, aber Sie können auch WPF (3.0) von PowerShell ausführen. Achten Sie jedoch auf STA und MTA für WPF, da nur PowerShell v2 volle Unterstützung für WPF bietet (volle Unterstützung für Thread-Affinität).

+0

Was ist mit meiner Frage zu Overlays? Kann ich eine 2.0-Assembly ersetzen (oder zumindest verbergen), indem ich die entsprechende 3.5-Assembly lade, sodass sich die Standardimplementierung von System.Xml.XmlDocument (zum Beispiel) ändert? –

+0

Ich werde versuchen, einen Weg zu finden, dies sicher zu bestimmen. Entschuldigung, ich habe diesen Teil verpasst. Fühlen Sie sich frei, die Markierung als Antwort aufzuheben. –

3

3.5 ist effektiv ein Add-On für 2.0. Das heißt, in 3.5 gibt es keine überholten Klassen; Es ist kein Ersatz. Die CLR (Common Language Runtime) ist immer noch v2.0.

8

Wenn Sie 3,5 auf Ihrem System installiert haben, erhalten Sie diese beim Ausführen von PowerShell.

PowerShell ist nur "erfordert" 2.0, aber 3.0 und 3.5 sind kompatibel und automatisch installiert, wenn installiert. In PowerShell V2 sehen wir tatsächlich, welche Version Sie haben und "beleuchten" bestimmte Funktionen (z. B. PowerShell_ISE und Out-GridView sind verfügbar, wenn Sie 3.51 haben).

Experiment! Genießen! Engagieren!

Jeffrey Snover [MSFT] Windows Management Partner Architekt

Verwandte Themen