การอ้างอิง system.management.automation.dll ใน Visual Studio


133

ฉันกำลังเริ่มดูโมเดล PowerShell และการพัฒนาสแน็ปอิน สิ่งแรกที่ฉันสังเกตเห็นคือการอ้างอิง System.management.automation.dll อย่างไรก็ตามใน Visual Studio แท็บ. NET ไม่มีแอสเซมบลีนั้นและไม่มีใครสามารถเรียกดูได้

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

เพื่อทำการอ้างอิงตามไฟล์

ฉันถูกบังคับให้คัดลอกไฟล์ออกด้วยตนเองเพื่อให้อ้างอิงได้ง่ายหรือไม่?


คุณช่วยพิจารณาเปลี่ยนคำตอบที่ยอมรับสำหรับคำตอบนี้ได้ไหม แนวทางแพ็คเกจ NuGet ดูเหมือนจะตรงไปตรงมาและแข็งแกร่งที่สุด
julealgon

คำตอบ:


168

System.Management.Automation บน Nuget

System.Management.Automation.dll บน NuGetซึ่งเป็นแพ็คเกจที่ใหม่กว่าจากปี 2015 ไม่อยู่ในรายการเหมือนก่อนหน้านี้!

แพ็คเกจทีม Microsoft PowerShell และ NuGet

อัปเดต:แพ็คเกจเป็นของ PowerShell Team แล้ว หึ!


2
สิ่งนี้สมควรได้รับมากขึ้น
foobarcode

5
ฉันหวังว่าไมโครซอฟท์จะเป็นเจ้าของ Nuget นี้เนื่องจากทุกวันนี้พวกเขามีความโล่งใจมาก
skfd

@skfd Microsoft เป็นเจ้าของ Nuget อยู่แล้ว .. คนที่อยู่เบื้องหลังใช้อีเมล microsoft.com และ NuGet เองก็เป็นส่วนหนึ่งของ Microsofts .NET Foundation ( dotnetfoundation.org )
Michael Bisbjerg

1
@MichaelBisbjerg ฉันคิดว่าเขาส่วนใหญ่หมายถึงแพ็คเกจ NuGet เฉพาะนี้ หากเป็นของ Microsoft (ในโลกอุดมคติ) พวกเขาจะต้องรับผิดชอบในการอัปเดตการเผยแพร่แพ็คเกจใหม่ ฯลฯ
Ben Randall

อัปเดตล่าสุดเมื่อ 29/03/2556 "เจ้าของยกเลิกการแสดงแพ็กเกจนี้ซึ่งอาจหมายความว่าแพ็กเกจนั้นเลิกใช้งานแล้วหรือไม่ควรใช้อีกต่อไป"
juFo

97

มีการติดตั้งสำเนาของ System.Management.Automation.dll เมื่อคุณติดตั้ง windows SDK (เป็นเวอร์ชันล่าสุดที่เหมาะสม) ควรอยู่ใน C: \ Program Files \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ v1.0 \


2
ฉันได้ติดตั้ง SDK บนเครื่อง 64 บิต 2 เครื่อง (ด้วยความยากลำบาก) และพบเวอร์ชัน 6.2.8229.0, 4.66MB dll บน 1 เท่านั้นและเฉพาะใน c: \ program files (x86) \ reference assemblies \ microsoft \ windowspowershell \ v1.0 ฉันขอแนะนำให้แก้ไขไฟล์. csproj หรือตรวจสอบใน DLL ที่ถูกต้องเพื่อควบคุมแหล่งที่มาและอ้างถึง การติดตั้ง SDK นั้นไม่ยืดหยุ่นเกินไป
James McLachlan

@ ashes999 PowerShell 2.0 ทำงานบน 1.0 DLL
kravits88

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

ฉันไม่รู้เกี่ยวกับ SDK แต่ฉันรู้ว่า WMF 3.0 ไม่ได้ติดตั้งลงใน C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ 3.0 ฉันต้องการติดตั้ง PowerShell 3.0 บน Windows 7 SP1 ซึ่งมีเวอร์ชัน 1.0 อยู่ใน C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ 1.0 และฉันใช้ Windows6.1-KB2506143-x64.msi จากmicrosoft .com / en-us / download / details.aspx? id = 34595และทำงานได้สำเร็จ อย่างไรก็ตามมันสร้าง * .dll เฉพาะใน C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ System.Management.Automation / v4.0_3.0.0.0__31bf3856ad364e35
Alexander Samoylov

เป็น * .dll ที่ถูกต้องเนื่องจากคำสั่ง "powershell.exe -version 3.0" หยุดทำงานถ้าฉันย้าย * .dll ขนาดของ * .dll แตกต่างจากที่มีอยู่โดยค่าเริ่มต้นในเครื่อง Windows 10 เครื่องอื่นใน C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ 3.0 ฉันสามารถสร้างโฟลเดอร์ C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ 3.0 บนเครื่อง Windows 7 SP1 และใส่ * .dll จาก C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ System Management.Automation / v4.0_3.0.0.0__31bf3856ad364e35 แต่คำถามคือจะติดตั้งอย่างไรให้ถูกต้อง
Alexander Samoylov

86

หากคุณไม่ต้องการติดตั้ง Windows SDK คุณสามารถรับ dll ได้โดยเรียกใช้คำสั่งต่อไปนี้ใน powershell:

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

8
ตอนนี้ยอดเยี่ยมมาก!
8DH

2
หวานมาก. คงไม่ได้คิดเรื่องนั้น
Marius

ขอบคุณสำหรับสิ่งนี้. แพ็คเกจ NuGet ใช้ไม่ได้กับฉันในแอปคอนโซล. NET 4.5.2 ใหม่ล่าสุด มัน "ติดตั้ง" แพคเกจ แต่ปฏิเสธที่จะเพิ่มข้อมูลอ้างอิง ในที่สุดฉันก็หยุดต่อสู้กับ NuGet และใช้คำตอบของคุณเพื่อเพิ่มข้อมูลอ้างอิงด้วยตนเอง ขอบคุณ!
Lews Therin

80

ฉันไม่สามารถติดตั้ง SDK ได้อย่างถูกต้อง (ไฟล์บางไฟล์ดูเหมือนไม่ได้ลงนามอะไรทำนองนั้น) ฉันพบทางออกอื่นที่นี่และดูเหมือนว่าจะใช้ได้สำหรับฉัน ไม่จำเป็นต้องติดตั้งไฟล์ใหม่เลย โดยทั่วไปสิ่งที่คุณทำคือ:

แก้ไขไฟล์. csproj ในโปรแกรมแก้ไขข้อความและเพิ่ม:

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

ไปยังส่วนที่เกี่ยวข้อง

หวังว่านี่จะช่วยได้


1
ดูเหมือนเป็นเรื่องแปลกสำหรับฉันที่เราต้องทำสิ่งนี้ด้วยตนเอง (แก้ไขไฟล์. csproj) แต่มันก็ใช้ได้ผลสำหรับฉัน
kd7iwp

การแก้ไขไฟล์โครงการเพียงบังคับให้โหลดเวอร์ชันจาก GAC (ซึ่งเป็นเวอร์ชัน V2) แทนระบบไฟล์ (ซึ่งเป็นเวอร์ชัน V1)
Derek Evermore

ซึ่งอาจนำไปสู่ปัญหาเมื่อแอปถูกปรับใช้กับเซิร์ฟเวอร์เนื่องจากอาจไม่พบแอสเซมบลีที่นั่น
มีนาคม

9

ถ้าเป็น 64 บิต - C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ WindowsPowerShell ** 3.0 **

และเวอร์ชันอาจแตกต่างกัน


2

ฉันใช้เมนู VS Project Reference และเรียกดู: C: \ windows \ assembly \ GAC_MSIL \ System.Management.Automation และเพิ่มการอ้างอิงสำหรับ dll และ Runspaces dll

ฉันไม่จำเป็นต้องแฮ็กไฟล์. csprj และเพิ่มบรรทัดอ้างอิงที่กล่าวถึงข้างต้น ฉันไม่ได้ติดตั้ง Windows SDK

ฉันทำสำเนา Powershell ที่กล่าวถึงข้างต้น: คัดลอก ([PSObject] .Assembly.Location) C: \

การทดสอบของฉันด้วยคำสั่ง Get-Process Powershell ใช้งานได้แล้ว ฉันใช้ตัวอย่างจาก Powershell สำหรับนักพัฒนาบทที่ 5


1

ชุดประกอบที่มาพร้อมกับ Powershell SDK (C: \ Program Files \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ v1.0) ไม่ได้มาพร้อมกับประเภทเฉพาะของ Powershell 2

การแก้ไขไฟล์ csproj ด้วยตนเองช่วยแก้ปัญหาของฉันได้


0

คุณยังสามารถใช้ nuget: https://www.nuget.org/packages/System.Management.Automation/ อาจเป็นตัวเลือกที่ดีกว่า


ฉันมีปัญหาว่ามีการอ้างอิง DLL ที่ถูกต้องในโครงการ แต่การสร้างใหม่ทำให้เกิดข้อผิดพลาดว่าไม่พบแพ็คเกจ Automation การใช้ Nuget แก้ไขสิ่งนี้ ตรวจสอบให้แน่ใจว่าคุณเลือก "โครงการเริ่มต้น" ที่ถูกต้องใน Package Manager Console เมื่อเรียกใช้ Install-Package
user3523091
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.