Visual Studio'da system.management.automation.dll'ye başvurma


131

PowerShell modeline ve ek bileşen geliştirmeye bakmaya başlıyorum. İlk fark ettiğim şey System.management.automation.dll'ye başvurmaktır. Ancak Visual Studio'da, .NET sekmesinde bu derleme yoktur ve biri de

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

dosya tabanlı bir referans yapmak için.

Kolay bir referans oluşturmak için dosyayı manuel olarak kopyalamak zorunda mıyım ?


Bunun için kabul edilen cevabı değiştirmeyi düşünür müsünüz? NuGet paketi yaklaşımı en basit ve sağlam gibi görünüyor.
julealgon

Yanıtlar:


165

Nuget'te System.Management.Otomasyon

NuGet'teki System.Management.Automation.dll, 2015'ten daha yeni bir paket, önceki gibi listelenmemiş!

NuGet un Microsoft PowerShell ekip paketleri

Güncelleme: paket artık PowerShell Ekibine aittir. Huzzah!


2
Bu daha fazlasını hak ediyor
foobarcode

5
Keşke Microsoft, bu günlerde çok nemli oldukları için bu Nuget'in sahipliğini alsın.
skfd

@skfd Microsoft, Nuget'in hemen hemen sahibi .. Arkasındaki kişiler microsoft.com e-postalarını kullanıyor ve NuGet , Microsofts .NET Foundation'ın ( dotnetfoundation.org ) bir parçası
Michael Bisbjerg

1
@MichaelBisbjerg, sanırım çoğunlukla bu belirli NuGet paketine atıfta bulunuyordu. Microsoft'a ait olsaydı, o zaman (ideal bir dünyada) güncel tutmaktan, yeni paketler yayınlamaktan vb. Sorumlu olacaklardı.
Ben Randall

son güncelleme 29/03/2013 "Sahip bu paketi listeden çıkardı. Bu, paketin kullanımdan kaldırıldığı veya artık kullanılmaması gerektiği anlamına gelebilir."
juFo

97

System.Management.Automation.dll dosyasının bir kopyası, Windows SDK'sını (yine de uygun, yeni bir sürümü) yüklediğinizde yüklenir. C: \ Program Files \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ v1.0 \ konumunda olmalıdır.


2
SDK'yı 2 farklı 64 bit makineye (zorlukla) yükledim ve 6.2.8229.0, 4.66MB dll sürümünü yalnızca 1 ve yalnızca c: \ program files (x86) \ reference assemblies \ microsoft \ windowspowershell'de buldum \ v1.0. .Csproj dosyasını düzenlemenizi veya kaynak kontrolü ve referans vermesi için doğru DLL'yi kontrol etmenizi şiddetle tavsiye ederim. SDK kurulumu çok esnek değil.
James McLachlan

@ ashes999 PowerShell 2.0, aslında 1.0 DLL üzerinde çalışır.
kravits88

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

Ben SDK bilmem, ama ben WMF 3.0 biliyoruz gelmez C içine yüklemek: \ Program Files (x86) \ Referans Meclisleri \ Microsoft \ WindowsPowerShell \ 3.0. PowerShell 3.0'ı C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ 1.0 konumunda bulunan bir Windows 7 SP1 üzerine kurmak istedim ve microsoft'tan Windows6.1-KB2506143-x64.msi'yi kullandım .com / en-us / download / details.aspx? id = 34595 ve başarıyla çalışıyor. Ancak * .dll'yi yalnızca C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ System.Management.Automation / v4.0_3.0.0.0__31bf3856ad364e35'te oluşturdu.
Alexander Samoylov

Bu doğru bir * .dll'dir, çünkü * .dll'yi taşırsam "powershell.exe -version 3.0" komutu çalışmayı durdurur. * .Dll dosyasının boyutu, C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ 3.0'da başka bir Windows 10 makinesinde varsayılan olarak bulunandan farklıdır. Windows 7 SP1 makinesinde C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ 3.0 klasörünü oluşturabilir ve C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ System'den * .dll dosyasını yerleştirebilirim. Management.Automation / v4.0_3.0.0.0__31bf3856ad364e35, ancak soru şu ki, nasıl düzgün şekilde kurulacağı.
Alexander Samoylov

85

Windows SDK yüklemek istemiyorsanız, powershell'de aşağıdaki komutu çalıştırarak dll'yi alabilirsiniz:

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

8
İşte bu harika!
8DH

2
Çok tatlı. Bunu düşünmezdim.
Marius,

Bunun için teşekkürler. NuGet paketi yepyeni bir .NET 4.5.2 konsol uygulamasında benim için çalışmaz. Paketi "kurdu", ancak referansı eklemeyi reddetti. Sonunda NuGet ile kavga etmeyi bıraktım ve cevabınızı referansı manuel olarak eklemek için kullandım. Teşekkürler!
Lews Therin

77

SDK'nın düzgün bir şekilde yüklenmesini sağlayamadım (bazı dosyalar imzasız görünüyordu, buna benzer bir şey). Başka bir çözüm buldumBurada ve bu benim için iyi görünüyor. Yeni dosyaların yüklenmesini gerektirmez. Temel olarak, yaptığınız şey:

.Csproj dosyasını bir metin düzenleyicide düzenleyin ve ekleyin:

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

ilgili bölüme.

Bu yardımcı olur umarım.


1
Bunu manuel olarak yapmamız (.csproj dosyasını düzenleyerek) bana garip geliyor ama benim için çalıştı.
kd7iwp

Proje dosyasını düzenlemek, dosyayı dosya sistemi (V1 sürümü) yerine GAC'den (V2 sürümü) yüklemeye zorlar
Derek Evermore

Bu, uygulama sunucuya dağıtıldığında sorunlara yol açabilir çünkü montaj orada bulunamayabilir.
marsze

9

64bit ise - C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ WindowsPowerShell ** 3.0 **

ve sürüm farklı olabilir


2

VS Project Reference menüsünü kullandım ve C: \ windows \ assembly \ GAC_MSIL \ System.Management.Automation'a göz attım ve dll ve Runspaces dll için bir referans ekledim.

.Csprj dosyasını hacklememe ve yukarıda belirtilen referans satırını eklememe gerek yoktu. Windows SDK yüklü değil.

Yukarıda bahsedilen Powershell kopyasını yaptım: Kopyala ([PSObject] .Assembly.Location) C: \

Get-Process Powershell komutuyla yaptığım test daha sonra işe yaradı. Powershell'den geliştiriciler için 5. Bölümden örnekler kullandım.


1

Powershell SDK (C: \ Program Files \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ v1.0) ile gelen derleme Powershell 2'ye özgü türlerle birlikte gelmez.

Csproj dosyasını manuel olarak düzenlemek sorunumu çözdü.


0

Ayrıca nuget'i de kullanabilirsiniz: https://www.nuget.org/packages/System.Management.Automation/ Belki daha iyi bir seçenektir.


Projede doğru DLL'ye başvurulma sorunuyla karşılaştım, ancak yeniden oluşturma, Otomasyon paketinin bulunamadığına dair bir hata verdi. Nuget kullanmak bunu düzeltti. Install-Package'ı çalıştırırken Paket Yöneticisi Konsolunda doğru "Varsayılan proje" yi seçtiğinizden emin olun.
user3523091
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.