Montajları doğrudan GAC'a yükleyen bir paket var (örneğin,% windows% / assembly içinde derin bir yerde).
Gerçek derleme (DLL) GAC normal dosya sistemine nasıl kovmak?
Teşekkürler.
Montajları doğrudan GAC'a yükleyen bir paket var (örneğin,% windows% / assembly içinde derin bir yerde).
Gerçek derleme (DLL) GAC normal dosya sistemine nasıl kovmak?
Teşekkürler.
Yanıtlar:
Bu makaledeki önerileri GAC'den bir derleme almak için kullandım.
DLL'yi GAC'den Çıkarma
GAC'de (normalde c: \ windows \ assembly konumunda bulunur) dağıtılan DLL dosyaları görüntülenemez veya normal bir DLL dosyası olarak kullanılamaz. VS projesinden doğrudan referans alınamazlar. Geliştiriciler genellikle orijinal DLL dosyasının bir kopyasını saklar ve projenin çalışma zamanında GAC derlemesini kullanan geliştirme (tasarım) zamanında projeye başvururlar.
Montaj (çalışma zamanı) sırasında, derlemenin GAC'de imzalandığı ve dağıtıldığı bulunursa, CLR, VS'de tasarım zamanında başvurulan DLL yerine derlemeyi GAC'den otomatik olarak alır. Geliştiricinin orijinal DLL dosyasını silmiş olması veya herhangi bir nedenle sahip olmaması durumunda, DLL dosyasını GAC'den almanın bir yolu vardır. GAC'den DLL kopyalamak için aşağıdaki adımları izleyin
Regsvr32 / u C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ shfusion.dll dosyasını çalıştırın
- shfusion.dll, GAC klasörüne farklı bir görünüm veren bir explorer uzantısı DLL'dir. Bu dosyanın kaydının kaldırılması derleme önbellek görüntüleyicisini kaldıracak ve GAC klasörü kaşifte normal bir klasör olarak görünecektir.
“% Windir% \ assembly \ GAC_MSIL” dosyasını açın.
DLL'nizi bulmak için DLL klasörünüze derinlemesine göz atın.
DLL dosyasını sabit diskinizde bir yere kopyalayın ve projenizde oradan yönlendirin
Shfusion.dll dosyasını yeniden kaydetmek ve GAC'ın özgün ayrı görünümünü yeniden kazanmak için "regsvr32% windir% \ Microsoft.NET \ Framework \ <. NET sürüm dizini> \ shfusion.dll" komutunu çalıştırın.
shfusion.dll
desteklemiyor gibi görünüyor . Bu seçeneğin atlanması, bileşenin başarıyla yeniden kaydedilmesini sağlar. DllInstall()
regsvr32
/i
Burada açıklanan yöntem çok kolaydır:
Makale Özeti:
\\YourServer\C$\Windows\Assembly
)Komut İstemi'ni açın ve şunu yazın:
cd c:\windows\assembly\GAC_MSIL
xcopy . C:\GacDump /s /y
Bu, tüm GAC'nin dökümünü vermelidir
Zevk almak!
Evet.
DisableCacheViewer Kayıt Defteri Anahtarı Ekle
HKLM \ Software \ Microsoft \ Fusion \ altında DisableCacheViewer adıyla yeni bir dword anahtarı oluşturun ve [DWORD] değerini 1 olarak ayarlayın.
Windows Gezgini'ne derleme klasörüne dönün ve normal dosya sistemi görünümü olacaktır.
Sanırım en kolay yol, David'in bahsettiği gibi komut satırından bunu yapmak. Tek hile .dll sadece C: \ Windows \ Assembly yer değil olmasıdır. C: \ Windows \ Assembly \ GAC \ [ASSEMBLY_NAME] \ [VERSION_NUMBER] _ [PUBLIC KEY] adresine gitmelisiniz. Daha sonra aşağıdakileri kullanarak bir kopya yapabilirsiniz:
[ASSEMBLY_NAME] .dll c: \ (veya istediğiniz konumu) kopyalayın
Umarım yardımcı olur.
Bulduğum kolay yol, komut istemini açmak ve istediğiniz DLL'yi bulana kadar bahsettiğiniz klasöre göz atmaktır - daha sonra bunu elde etmek için copy komutunu kullanabilirsiniz. Windows Gezgini bu klasörün "yardımcı" özel bir görünümüne sahiptir.
RUN'u açın ve yazın %windir%\assembly\GAC_MSIL
, bu dll'lerinizi klasörlerin görünümünde açacak ve daha sonra dll adlı klasöre gidip açabileceksiniz, dll dosyanızı bulacak ve kolayca kopyalayabileceksiniz
Ben yazarı değilim PowerShell GAC . PowerShell GAC ile klasör yapılarını değiştirmek gibi GAC dahili bileşenlerine bağlı kalmadan montajları GAC'den çıkarabilirsiniz.
Get-GacAssembly SomeCompany* | Get-GacAssemblyFile | Copy-Item -Dest C:\Temp\SomeCompany
Kayıt defterini değiştirmeden veya komut satırını, powershell'i veya diğer programları kullanmadan GAC'ın içine bakmanın bir yolunu bulduğumu düşünün:
Yeni bir kısayol oluşturun (herhangi bir yere). Ardından, hedefin olması için kısayolu değiştirin:
%windir%\assembly\GAC_MSIL\System
Bu kısayolu açmak sizi GAC içindeki (herkesin sahip olması gereken) Sistem klasörüne götürür ve daha yüksek bir dizine geçmenizi ve ardından istediğiniz herhangi bir klasöre göz atmanızı (ve dll dosyalarına vb.
Bunu Windows 7 ve Windows Server 2012'de test ettim.
Not: Kısayolu oluştururken bu hedefi kullanmanıza izin vermez, ancak düzenlemenize izin verir.
Zevk almak!
Bir Powershell betiğinden bunu deneyebilirsiniz. GAC'de montajın sadece tek bir versiyonu vardı, bu yüzden bu iyi çalıştı.
cd "c:\Windows\Microsoft.NET\assembly\GAC_MSIL\"
Get-ChildItem assemblypath -Recurse -Include *.dll | Copy-Item -Destination "c:\folder to copy to"
burada montaj yolu joker karakterler kullanabilir.
Başka bir yön - sadece MSI dosyasını açın ve hediyeler bu şekilde olsun. Sizi nihai kaldırma işleminden kurtarır. . .
Bir komut satırından kopyalama gerekli değildir. Başlangıç Penceresi aramasından DLL adını yazdım. Daha Fazla Sonuç Görmeyi seçtim. GAC'deki arama penceresine döndürüldü. Üzerine sağ tıkladım ve açık dosya konumu söyledim. Normal Windows Gezgini'nde açıldı. Dosyayı kopyaladım. Pencereyi kapattım. Bitti.