2009-12-08 5 views
9

Ich habe einen Buildfehler in einem cis-Programm, das ich in Visual Studio 2008 auf einem Windows Server (2008, schätze ich) SP 2 64-Bit OS kompiliere. Es besagt, dass "System.Management.Automation.PSObject" in einer Assembly definiert ist, auf die nicht verwiesen wird. Ich habe in MSDN gesucht und festgestellt, dass dies Teil des Windows Power Shell SDK zu sein scheint. http://msdn.microsoft.com/en-us/library/system.management.automation.psobject(VS.85).aspxWindows Powershell SDK und System.Management.Automation.PSObject

Das Problem ist, dass ich bereits die Windows PowerShell habe. Wenn das alles ist, was ich brauche, wie benutze ich es oder referenziere es in der C Sharp IDE. Wenn ich etwas extra herunterladen muss (zB das SDK), wo soll ich das machen und installieren? Ich konnte nichts online finden.

Antwort

14

Suchen Sie in C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0 für System.Management.Automation.dll, und wenn es vorhanden ist, fügen Sie es als Referenz in Ihrem C# -Projekt hinzu. Wenn es nicht existiert, dann laden Sie die Windows SDK herunter, die die Datei an den oben genannten Ort bringt.

+0

Sweet. Danke. Das hat funktioniert. – xarzu

+0

Holen Sie es stattdessen von NuGet. – pkr298

34

Wenn Sie es dort nicht finden können, geben Sie dies an einer PowerShell-Eingabeaufforderung ein.

Copy ([PSObject].Assembly.Location) ~/Desktop 
+1

+1. Nice one :-) – Joey

+0

Guter Tipp auch. Danke. – xarzu

+0

danke! wirklich geholfen, da die x86-Version nicht wirklich funktioniert: p – chikuba

13

Um die PowerShell korrekt zu referenzieren, sollten Sie auf die PowerShell im GAC verweisen. Die im Lieferumfang des Vista-SDK enthaltene PowerShell ist PowerShell V1.0, und diese Technik verweist auf 1.0, 2.0 oder X.0, was auch immer installiert ist. Wenn Sie auf die SDK-Assembly verweisen, wird auch nicht das portierbarste Projekt erstellt, da Sie das SDK installieren müssen, um das Projekt zu erstellen, und nicht nur Visual Studio und Windows.

Leider ist das Verweisen auf GAC-Elemente nicht etwas, das die Visual Studio-Benutzeroberfläche sauber ausführt, also müssen Sie die CSProj-Datei manuell bearbeiten. Suchen Sie den Abschnitt mit Elementen und fügen Sie dieses Referenzelement hinzu.

<Reference Include="System.Management.Automation" /> 

Dies wird die letzte System.Management.Automation auf dem System installiert verweisen, unabhängig davon, welche Version es sich handelt.

Hoffe, das hilft

+1

Hmm, ich verstehe, dass der GAC für den Runtime-Zugriff auf Assemblys gedacht ist und dass Sie zum Kompilieren Ihre Assemblys an einem anderen Ort ablegen sollten, der leicht von Visual Studio aus referenziert werden kann, z. "$ env: ProgramFiles \ Reference Assemblies". –

+0

Es spielt wirklich keine Rolle, auf welche Sie sich beziehen. Der starke Name wird übereinstimmen und die Publisher-Richtlinie wird zur richtigen Assembly in GAC umgeleitet, unabhängig davon, von wo aus Sie darauf verwiesen haben. Die in GAC ist nur eine letzte Möglichkeit, eine aktuelle Assembly als Referenz zu erhalten. Mit SharePoint zum Beispiel ist es die einzige Möglichkeit, die Assemblies für einen Client zu extrahieren. – Josh

+1

Früher war es so, dass Sie auf einen Speicherort verwiesen haben, der auch eine XML-Dokumentationskommentendatei enthielt, die zusätzliche Intellisense-Informationen enthielt. Nicht sicher, ob das heute noch so ist. –