Odwoływanie się do systemu.management.automation.dll w programie Visual Studio


133

Zaczynam przyglądać się modelowi PowerShell i tworzeniu przystawek. Pierwszą rzeczą, którą zauważyłem, jest odwołanie się do System.management.automation.dll. Jednak w programie Visual Studio karta .NET nie ma tego zestawu i nie można jej przeglądać

C:\windows\assembly\GAC_MSIL\System.Management.Automation\1.0.0.0__31bf3856ad364e35\System.Management.Automation.dll

aby utworzyć odniesienie do pliku.

Czy jestem zmuszony do ręcznego kopiowania pliku, aby ułatwić sobie do niego dostęp ?


Czy możesz rozważyć zmianę zaakceptowanej odpowiedzi na tę? Wydaje się, że podejście do pakietu NuGet jest najbardziej proste i niezawodne.
— julealgon

Odpowiedzi:


168

System.Management.Automation na Nuget

System.Management.Automation.dll w NuGet , nowszy pakiet z 2015 roku, nie jest zastrzeżony jak poprzedni!

Pakiety zespołu Microsoft PowerShell w NuGet

Aktualizacja: pakiet jest teraz własnością zespołu programu PowerShell. Huzzah!


2
To zasługuje na więcej
— foobarcode

5
Chciałbym, aby Microsoft przejął na własność ten Nuget, ponieważ są one tak wilgotne w dzisiejszych czasach.
— skfd

@skfd Microsoft jest już prawie właścicielem Nugeta .. Ludzie stojący za nim używają e-maili microsoft.com, a sam NuGet jest częścią Microsofts .NET Foundation ( dotnetfoundation.org )
— Michael Bisbjerg

1
@MichaelBisbjerg, myślę, że odnosił się głównie do tego konkretnego pakietu NuGet. Gdyby był własnością Microsoftu, to (w idealnym świecie) byliby odpowiedzialni za aktualizowanie go, wydawanie nowych pakietów itp.
— Ben Randall

ostatnia aktualizacja: 29/03/2013 „Właściciel zablokował ten pakiet na liście. Może to oznaczać, że pakiet jest przestarzały lub nie powinien być już używany.”
— JuFo

97

Kopia System.Management.Automation.dll jest instalowana podczas instalacji zestawu Windows SDK (w każdym razie jego odpowiedniej, najnowszej wersji). Powinien znajdować się w C: \ Program Files \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ v1.0 \


2
Zainstalowałem SDK na 2 różnych maszynach 64-bitowych (z trudnością) i znalazłem wersję 6.2.8229.0, dll 4.66MB tylko na 1 i tylko w c: \ program files (x86) \ reference assemblies \ microsoft \ windowspowershell \ v1.0. Zdecydowanie polecam edycję pliku .csproj lub sprawdzenie odpowiedniej biblioteki DLL do kontroli źródła i odwoływanie się do niej. Instalacja SDK jest po prostu zbyt nieelastyczna.
— James McLachlan

@ ashes999 PowerShell 2.0 faktycznie działa na 1.0 DLL.
— kravits88,

3
2014.07.11 na x64 jest w C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ 3.0 \ System.Management.Automation.dll
— Christopher G. Lewis

Nie wiem o SDK, ale wiem, że WMF 3.0 nie instaluje go w C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ 3.0. Chciałem zainstalować PowerShell 3.0 na Windows 7 SP1, który miał wersję 1.0 znajdującą się w C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ 1.0 i użyłem Windows6.1-KB2506143-x64.msi firmy Microsoft .com / en-us / download / details.aspx? id = 34595 i działa pomyślnie. Jednak utworzył * .dll tylko w C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ System.Management.Automation / v4.0_3.0.0.0__31bf3856ad364e35.
— Alexander Samoylov

To poprawny plik * .dll, ponieważ polecenie „powershell.exe -version 3.0” przestaje działać, gdy przenoszę plik * .dll. Rozmiar * .dll różni się od tego, który jest domyślnie obecny na innym komputerze z systemem Windows 10 w folderze C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ 3.0. Mogę utworzyć folder C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ 3.0 na komputerze z systemem Windows 7 SP1 i umieścić tam * .dll z C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ System. Management.Automation / v4.0_3.0.0.0__31bf3856ad364e35, ale pytanie brzmi, jak to poprawnie zainstalować.
— Alexander Samoylov

86

Jeśli nie chcesz instalować zestawu Windows SDK, możesz pobrać bibliotekę dll, uruchamiając następujące polecenie w programie PowerShell:

Copy ([PSObject].Assembly.Location) C:\

8
Teraz to jest genialne!
— 8DH

2
Bardzo słodkie. Nie pomyślałbym o tym.
— Marius

Dzięki za to. Pakiet NuGet nie działałby dla mnie w zupełnie nowej aplikacji konsoli .NET 4.5.2. „Zainstalował” pakiet, ale odmówił dodania odniesienia. W końcu przestałem walczyć z NuGet i użyłem Twojej odpowiedzi, aby ręcznie dodać odwołanie. Dzięki!
— Lews Therin,

80

Nie udało mi się poprawnie zainstalować SDK (niektóre pliki wydawały się niepodpisane, coś w tym rodzaju). Znalazłem tutaj inne rozwiązanie i wydaje mi się, że działa dobrze. W ogóle nie wymaga instalacji nowych plików. Zasadniczo to, co robisz, to:

Edytuj plik .csproj w edytorze tekstu i dodaj:

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

do odpowiedniej sekcji.

Mam nadzieję że to pomoże.


1
Wydaje mi się dziwne, że musimy to zrobić ręcznie (edytując plik .csproj), ale to zadziałało.
— kd7iwp

Edycja pliku projektu po prostu zmusza go do załadowania wersji z GAC (która jest wersją V2) zamiast z systemu plików (która jest wersją V1)
— Derek Evermore

Może to prowadzić do problemów, gdy aplikacja jest wdrażana na serwerze, ponieważ zestaw może nie zostać tam znaleziony.
— marsze

9

jeśli jest to wersja 64-bitowa - C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ WindowsPowerShell ** 3.0 **

a wersja może być inna


2

Użyłem menu VS Project Reference i przejrzałem do: C: \ windows \ assembly \ GAC_MSIL \ System.Management.Automation i dodałem odniesienie do biblioteki dll i Runspaces dll.

Nie musiałem hakować pliku .csprj i dodawać wspomnianej powyżej linii odniesienia. Nie mam zainstalowanego zestawu Windows SDK.

Zrobiłem wspomnianą powyżej kopię Powershell: Copy ([PSObject] .Assembly.Location) C: \

Mój test z poleceniem Get-Process Powershell zadziałał. Użyłem przykładów z Powershell dla programistów w rozdziale 5.


1

Zestaw pochodzący z Powershell SDK (C: \ Program Files \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ v1.0) nie zawiera określonych typów programu Powershell 2.

Ręczna edycja pliku csproj rozwiązała mój problem.


0

Możesz również użyć nuget: https://www.nuget.org/packages/System.Management.Automation/ To może być lepsza opcja.


Miałem problem z odwołaniem się do poprawnej biblioteki DLL w projekcie, ale ponowne kompilowanie dało błąd, że nie znaleziono pakietu Automation. Użycie Nuget naprawiło to. Upewnij się, że wybrałeś właściwy „Projekt domyślny” w konsoli Menedżera pakietów podczas uruchamiania Install-Package.
— user3523091
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.