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.
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:
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
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.
Buka “% windir% \ assembly \ GAC_MSIL”.
Jelajahi folder DLL Anda ke dalam untuk menemukan DLL Anda.
Salin DLL di suatu tempat di hard disk Anda dan rujuk dari sana di proyek Anda
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.
shfusion.dll
tidak mendukung DllInstall()
titik masuk yang dipanggil regsvr32
ketika melewati /i
opsi. Menghilangkan opsi itu memungkinkan untuk mendaftarkan ulang komponen dengan sukses.
Metode yang dijelaskan di sini sangat mudah:
Ringkasan dari Artikel:
\\YourServer\C$\Windows\Assembly
)Buka Command Prompt dan Ketik:
cd c:\windows\assembly\GAC_MSIL
xcopy . C:\GacDump /s /y
Ini harus memberikan dump dari seluruh GAC
Nikmati!
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.
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.
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.
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
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
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!
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.
Satu arah lain - cukup buka file MSI dan dapatkan barang dengan cara itu. Menyelamatkan Anda dari pencopotan pemasangan. . .
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.