Bagaimana cara mengekstrak perakitan dari GAC?


134

Ada paket yang harus saya tangani yang menginstal rakitan langsung ke GAC (misalnya di suatu tempat jauh di% windows% / assembly).

Bagaimana cara mengeluarkan rakitan aktual (DLL) dari GAC ke sistem file normal?

Terima kasih.

Jawaban:


150

Saya menggunakan saran dari artikel ini untuk mendapatkan perakitan dari GAC.

Dapatkan DLL Keluar dari GAC

DLL setelah diterapkan di GAC (biasanya terletak di c: \ windows \ assembly) tidak dapat dilihat atau digunakan sebagai file DLL normal. Mereka tidak dapat dirujuk langsung dari proyek VS. Pengembang biasanya menyimpan salinan file DLL asli dan merujuknya dalam proyek pada waktu pengembangan (desain), yang menggunakan rakitan dari GAC selama waktu proyek berjalan.

Selama eksekusi (run-time) jika perakitan ditemukan ditandatangani dan disebarkan di GAC, CLR secara otomatis mengambil perakitan dari GAC alih-alih DLL yang direferensikan selama waktu desain di VS. Jika pengembang telah menghapus DLL asli atau tidak memilikinya karena alasan tertentu, ada cara untuk mendapatkan file DLL dari GAC. Ikuti langkah-langkah berikut untuk menyalin DLL dari GAC

  1. Jalankan regsvr32 / u C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ shfusion.dll

    • shfusion.dll adalah DLL ekstensi explorer yang memberikan tampilan berbeda ke folder GAC. Membatalkan pendaftaran file ini akan menghapus penampil cache assembly dan folder GAC kemudian akan terlihat sebagai folder normal di explorer.
  2. Buka “% windir% \ assembly \ GAC_MSIL”.

  3. Jelajahi folder DLL Anda ke dalam untuk menemukan DLL Anda.

  4. Salin DLL di suatu tempat di hard disk Anda dan rujuk dari sana di proyek Anda

  5. Jalankan "regsvr32% windir% \ Microsoft.NET \ Framework \ <. Direktori versi NET> \ shfusion.dll" untuk mendaftarkan ulang file shfusion.dll dan mendapatkan kembali tampilan berbeda asli dari GAC.


81
Ini berfungsi tetapi sedikit rumit. Jika Anda tidak takut dengan prompt perintah, Anda dapat melakukan cd ke direktori yang diperlukan dan menyalin DLL dengan cara itu.
Cheeso

3
Cukup instal TotalCommander, aktifkan opsi untuk melihat semua file tersembunyi dan Anda dapat mengambil setiap perakitan yang Anda inginkan
Patrick Peters

4
@Andrew, sepertinya shfusion.dlltidak mendukung DllInstall()titik masuk yang dipanggil regsvr32ketika melewati /iopsi. Menghilangkan opsi itu memungkinkan untuk mendaftarkan ulang komponen dengan sukses.
Frédéric Hamidi

9
Anda dapat melewati langkah 1 dan 2, dan langsung menuju ke% windir% \ assembly \ GAC_MSIL dan menjelajahinya dari sana.
Christian Fredh

5
@ChristianFredh Sekadar catatan: bagi saya, ini hanya bisa dilakukan langsung dari dialog Run.
xr280xr


85

Buka Command Prompt dan Ketik:

cd  c:\windows\assembly\GAC_MSIL 

xcopy . C:\GacDump /s /y

Ini harus memberikan dump dari seluruh GAC

Nikmati!


10
Jawaban Deepak lebih jelas & menggunakan xcopy dengan bendera yang sesuai.
katbyte

Saya akan menilai jawaban ini # 1 karena butuh 5 detik untuk mendapatkan semuanya, setelah membahas masalah pada pendekatan langkah demi langkah.
FBryant87

24

Iya.

Tambahkan Kunci Registri DisableCacheViewer

Buat kunci dword baru di bawah HKLM \ Software \ Microsoft \ Fusion \ dengan nama DisableCacheViewer dan setel nilai [DWORD] ke 1.

Kembali ke Windows Explorer ke folder perakitan dan itu akan menjadi tampilan sistem file normal.


2
Jawaban di bawah nilai. Terima kasih!
xr280xr

1
Inilah solusi sebenarnya. Mudah diurungkan, dan tidak perlu baris perintah.
pengguna2920518

16

Menurut saya cara termudah adalah melakukannya melalui baris perintah seperti yang disebutkan David. Trik satu-satunya adalah bahwa .dll tidak hanya terletak di C: \ Windows \ Assembly. Anda harus menavigasi ke C: \ Windows \ Assembly \ GAC \ [ASSEMBLY_NAME] \ [VERSION_NUMBER] _ [PUBLIC KEY]. Anda kemudian dapat melakukan penyalinan menggunakan:

salin [ASSEMBLY_NAME] .dll c: \ (atau lokasi mana pun yang Anda inginkan)

Semoga membantu.


13

Cara mudah yang saya temukan adalah dengan membuka command prompt dan menelusuri folder yang Anda sebutkan sampai Anda menemukan DLL yang Anda inginkan - Anda kemudian dapat menggunakan perintah salin untuk mengeluarkannya. Windows Explorer memiliki tampilan khusus yang "membantu" dari folder ini.


Saya menemukan masalah menarik pagi ini. Saya memperbarui DLL di GAC, dan menggunakan metode garis cmd untuk membuat cadangan. Ketika saya mencoba mengunggah DLL baru (nomor versi yang sama), saya menerima kesalahan yang hanya hilang ketika saya menutup jendela cmd. Butuh beberapa menit untuk mengumpat untuk mencari tahu apa yang salah!
NeilD

11

Buka RUN lalu ketik %windir%\assembly\GAC_MSIL, ini akan membuka dll Anda di tampilan folder Anda kemudian dapat menavigasi ke folder bernama dll Anda dan membukanya, Anda akan menemukan file dll Anda dan menyalinnya dengan mudah


Solusi yang sangat mudah. Terima kasih.
Dblock247

4

Saya adalah penulis PowerShell GAC . Dengan PowerShell GAC Anda dapat mengekstrak rakitan dari GAC tanpa bergantung pada internal GAC seperti mengubah struktur folder.

Get-GacAssembly SomeCompany* | Get-GacAssemblyFile | Copy-Item -Dest C:\Temp\SomeCompany

3

Posting blog MSDN ini menjelaskan tiga cara terpisah untuk mengekstrak DLL dari GAC. Ringkasan berguna dari metode yang diberikan sejauh ini.


3

Gunakan browser file "Total Commander" sebagai gantinya.

  1. Aktifkan pengaturan "tampilkan file tersembunyi / sistem" di Total Commander
  2. Jelajahi ke "c: \ windows \ assembly"
  3. salinan

3

Saya pikir saya menemukan cara untuk melihat ke dalam GAC tanpa memodifikasi registri atau menggunakan baris perintah, PowerShell, atau program lain:

Buat pintasan baru (ke mana saja). Kemudian ubah pintasan agar memiliki target menjadi:

%windir%\assembly\GAC_MSIL\System

Membuka pintasan ini membawa Anda ke folder Sistem di dalam GAC (yang seharusnya dimiliki semua orang) dan memiliki efek samping yang luar biasa yaitu membiarkan Anda beralih ke direktori yang lebih tinggi dan kemudian menjelajah ke folder lain yang Anda inginkan (dan melihat file dll, dll)

Saya menguji ini di windows 7 dan windows server 2012.

Catatan: Ini tidak akan membiarkan Anda menggunakan target itu saat membuat pintasan tetapi akan membiarkan Anda mengeditnya.

Nikmati!


2

cukup arahkan ke C: \ Windows temukan folder [assembly] klik kanan dan pilih tambahkan ke arsip

Tunggu sebentar

vola Anda memiliki file arsip yang berisi semua majelis di GAC Anda


2

Dari skrip Powershell, Anda dapat mencoba ini. Saya hanya memiliki satu versi perakitan di GAC jadi ini bekerja dengan baik.

cd "c:\Windows\Microsoft.NET\assembly\GAC_MSIL\"
Get-ChildItem assemblypath -Recurse -Include *.dll |  Copy-Item -Destination "c:\folder to copy to"

di mana jalur perakitan dapat menggunakan karakter pengganti.


0

Satu arah lain - cukup buka file MSI dan dapatkan barang dengan cara itu. Menyelamatkan Anda dari pencopotan pemasangan. . .


0

Menyalin dari baris perintah tidak diperlukan. Saya mengetik nama DLL dari pencarian Start Window. Saya memilih See More Results. Yang ada di GAC dikembalikan di jendela pencarian. Saya mengklik kanan padanya dan berkata buka lokasi file. Itu dibuka di Windows Explorer normal. Saya menyalin file. Saya menutup jendela. Selesai.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.