มีแพ็คเกจที่ฉันต้องจัดการซึ่งติดตั้งแอสเซมบลีตรงเข้าไปใน GAC (เช่นที่ไหนสักแห่งที่ลึกเป็น% windows% / แอสเซมบลี)
ฉันจะขับไล่แอสเซมบลีจริง (DLL) จาก GAC เข้าสู่ระบบไฟล์ปกติได้อย่างไร
ขอบคุณ.
มีแพ็คเกจที่ฉันต้องจัดการซึ่งติดตั้งแอสเซมบลีตรงเข้าไปใน GAC (เช่นที่ไหนสักแห่งที่ลึกเป็น% windows% / แอสเซมบลี)
ฉันจะขับไล่แอสเซมบลีจริง (DLL) จาก GAC เข้าสู่ระบบไฟล์ปกติได้อย่างไร
ขอบคุณ.
คำตอบ:
ฉันใช้คำแนะนำจากบทความนี้เพื่อรับชุดประกอบจาก GAC
นำ DLL ออกจาก GAC
เมื่อใช้งาน DLL ใน GAC แล้ว (โดยปกติจะอยู่ที่ c: \ windows \ assembly) จะไม่สามารถดูหรือใช้เป็นไฟล์ DLL ปกติได้ ไม่สามารถอ้างอิงโดยตรงจากโครงการ VS นักพัฒนามักจะเก็บสำเนาของไฟล์ DLL ดั้งเดิมไว้และอ้างถึงในโปรเจ็กต์ตามเวลาพัฒนา (ออกแบบ) ซึ่งใช้แอสเซมบลีจาก GAC ระหว่างรันไทม์ของโปรเจ็กต์
ในระหว่างการดำเนินการ (รันไทม์) หากพบว่าแอสเซมบลีถูกลงนามและปรับใช้ใน GAC CLR จะรับแอสเซมบลีจาก GAC โดยอัตโนมัติแทนที่จะเป็น DLL ที่อ้างถึงระหว่างเวลาออกแบบใน VS ในกรณีที่นักพัฒนาลบ DLL เดิมหรือไม่มีด้วยเหตุผลบางประการมีวิธีรับไฟล์ DLL จาก GAC ทำตามขั้นตอนต่อไปนี้เพื่อคัดลอก DLL จาก GAC
เรียกใช้ regsvr32 / u C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ shfusion.dll
- shfusion.dll เป็น DLL ส่วนขยาย explorer ที่ให้รูปลักษณ์ที่แตกต่างไปจากโฟลเดอร์ GAC การยกเลิกการลงทะเบียนไฟล์นี้จะลบแอสเซมบลีแคชวิวเวอร์และโฟลเดอร์ GAC จะมองเห็นได้เหมือนโฟลเดอร์ปกติใน explorer
เปิด“% windir% \ assembly \ GAC_MSIL”
เรียกดูโฟลเดอร์ DLL ของคุณในส่วนลึกเพื่อค้นหา DLL ของคุณ
คัดลอก DLL ที่ใดที่หนึ่งบนฮาร์ดดิสก์ของคุณและอ้างอิงจากที่นั่นในโครงการของคุณ
เรียกใช้ "regsvr32% windir% \ Microsoft.NET \ Framework \ <. NET version directory> \ shfusion.dll" เพื่อลงทะเบียนไฟล์ shfusion.dll อีกครั้งและรับมุมมองที่แตกต่างเดิมของ GAC
shfusion.dll
จะไม่รองรับDllInstall()
จุดเริ่มต้นที่เรียกใช้regsvr32
เมื่อผ่าน/i
ตัวเลือก การละเว้นตัวเลือกดังกล่าวจะทำให้สามารถลงทะเบียนส่วนประกอบใหม่ได้สำเร็จ
วิธีการที่อธิบายไว้ที่นี่นั้นง่ายมาก:
สรุปจากบทความ:
\\YourServer\C$\Windows\Assembly
)เปิดพร้อมรับคำสั่งและพิมพ์:
cd c:\windows\assembly\GAC_MSIL
xcopy . C:\GacDump /s /y
สิ่งนี้ควรให้การถ่ายโอนข้อมูลของ GAC ทั้งหมด
สนุก!
ใช่.
เพิ่มคีย์รีจิสทรี DisableCacheViewer
สร้างคีย์ dword ใหม่ภายใต้ HKLM \ Software \ Microsoft \ Fusion \ ด้วยชื่อ DisableCacheViewer และตั้งค่าเป็น [DWORD] เป็น 1
กลับไปที่ Windows Explorer ไปที่โฟลเดอร์แอสเซมบลีและจะเป็นมุมมองระบบไฟล์ปกติ
ฉันคิดว่าวิธีที่ง่ายที่สุดคือทำผ่านบรรทัดคำสั่งเหมือนที่เดวิดกล่าวถึง เคล็ดลับเดียวคือ. dll ไม่ได้อยู่ที่ C: \ Windows \ Assembly คุณต้องไปที่ C: \ Windows \ Assembly \ GAC \ [ASSEMBLY_NAME] \ [VERSION_NUMBER] _ [PUBLIC KEY] จากนั้นคุณสามารถทำสำเนาโดยใช้:
คัดลอก [ASSEMBLY_NAME] .dll c: \ (หรือตำแหน่งใดก็ได้ที่คุณต้องการ)
หวังว่าจะช่วยได้
วิธีง่ายๆที่ฉันพบคือเปิดพรอมต์คำสั่งและเรียกดูโฟลเดอร์ที่คุณพูดถึงจนกว่าคุณจะพบ DLL ที่คุณต้องการจากนั้นคุณสามารถใช้คำสั่งคัดลอกเพื่อเอาออกได้ Windows Explorer มีมุมมองพิเศษ "เป็นประโยชน์" ของโฟลเดอร์นี้
เปิดRUNจากนั้นพิมพ์%windir%\assembly\GAC_MSIL
สิ่งนี้จะเปิด dlls ของคุณในมุมมองโฟลเดอร์จากนั้นคุณสามารถไปที่โฟลเดอร์ชื่อ dll ของคุณและเปิดขึ้นคุณจะพบไฟล์ dll ของคุณและคัดลอกได้อย่างง่ายดาย
ผมผู้เขียนของPowerShell GAC ด้วย PowerShell GAC คุณสามารถแยกแอสเซมบลีจาก GAC ได้โดยไม่ต้องขึ้นอยู่กับ GAC ภายในเช่นการเปลี่ยนโครงสร้างโฟลเดอร์
Get-GacAssembly SomeCompany* | Get-GacAssemblyFile | Copy-Item -Dest C:\Temp\SomeCompany
ใช้ไฟล์เบราว์เซอร์ "Total Commander" แทน
คิดว่าฉันหาวิธีดูภายใน GAC โดยไม่ต้องแก้ไขรีจิสทรีหรือใช้บรรทัดคำสั่ง powershell หรือโปรแกรมอื่น ๆ :
สร้างทางลัดใหม่ (ไปที่ใดก็ได้) จากนั้นแก้ไขทางลัดเพื่อให้เป้าหมายเป็น:
%windir%\assembly\GAC_MSIL\System
การเปิดทางลัดนี้จะนำคุณไปยังโฟลเดอร์ System ภายใน GAC (ซึ่งทุกคนควรมี) และมีผลข้างเคียงที่ยอดเยี่ยมในการให้คุณเปลี่ยนไปใช้ไดเรกทอรีที่สูงขึ้นจากนั้นเรียกดูโฟลเดอร์อื่นที่คุณต้องการ (และดูไฟล์ dll ฯลฯ )
ฉันทดสอบสิ่งนี้บน windows 7 และ windows server 2012
หมายเหตุ: จะไม่อนุญาตให้คุณใช้เป้าหมายนั้นเมื่อสร้างทางลัด แต่จะให้คุณแก้ไขได้
สนุก!
เพียงไปที่ C: \ Windows ค้นหาโฟลเดอร์ [แอสเซมบลี] คลิกขวาแล้วเลือกเพิ่มลงในไฟล์เก็บถาวร
รอสักครู่
vola คุณมีไฟล์เก็บถาวรที่มีส่วนประกอบทั้งหมดใน GAC ของคุณ
จากสคริปต์ Powershell คุณสามารถลองสิ่งนี้ได้ ฉันมีชุดประกอบเพียงรุ่นเดียวใน GAC ดังนั้นจึงใช้งานได้ดี
cd "c:\Windows\Microsoft.NET\assembly\GAC_MSIL\"
Get-ChildItem assemblypath -Recurse -Include *.dll | Copy-Item -Destination "c:\folder to copy to"
โดยที่พา ธ การประกอบสามารถใช้สัญลักษณ์แทนได้
อีกทางหนึ่ง - เพียงแค่แกะไฟล์ MSI และรับสิ่งดีๆด้วยวิธีนั้น ช่วยคุณจากการถอนการติดตั้งในที่สุด . .
ไม่จำเป็นต้องคัดลอกจากบรรทัดคำสั่ง ฉันพิมพ์ชื่อ DLL จากการค้นหา Start Window ฉันเลือกดูผลลัพธ์เพิ่มเติม หนึ่งใน GAC ถูกส่งคืนในหน้าต่างค้นหา ฉันคลิกขวาแล้วพูดว่าเปิดตำแหน่งไฟล์ เปิดใน Windows Explorer ปกติ ฉันคัดลอกไฟล์ ฉันปิดหน้าต่าง เสร็จแล้ว