GAC Util de bulunan DLL’lerinizi assembly klasörünüzden başka bir klasöre çıkarmak, başka bir makinaya taşımak veya kopyalamak, normal klasörlerdeki benzer işlemlere nazaran çok daha zordur. Herhangi bir dll in üzerine sağ tıklarsanız şekildeki gibi bir ekranla karşılaşırsınız.
şekilde de görüldüğü üzere istediğiniz işlemleri bulamayabilirsiniz. CTRL+c ve CTRL+x i denediğinizi görür gibi oluyorum. Fakat bu işlem de işinize yaramayacaktır. Assembly klasörünü başka bir makinaya komple kopyalarsanız, bu işlemle de sadece o makinanın dll lerini kopyalamış olursunuz. Uzun lafın kısası bu iş kolayca olmuyor
Uzun Yol ile :
- Bir adet command prompt açın,
- c:\\Windows\Assembly\GAC veya c:\\Windows\Assembly\GAC_MSIL klasörlerinden birinde istediğiniz DLL dosyasını bulun
- Örneğin xyz.dll dosyasını, Gac_MSIL klasöründe bulduk. c:\\Windows\Assembly\GAC_MSIL\xyz\ dizinine gidin, Buradaki xyz dizini, dll adıyla birebir aynıdır.
- Daha sonra aşağıdaki şekildeki gibi xyz.dll dosyası Assembly klasöründe bulunur ve dosyanın özelliklerine gidilir.

- Yukarıdaki şekilde altı çizili versiyon ve public key token bilgilerindeki “versiyon__publickeytoken” şeklindeki bir alt klasöre geçilir. Resimdeki DLL için örnek verecek olursak klasör adı : 10.0.4504.0__31bf3856ad364e35 olacaktır.
- Son olarak da bu klasör içerisinde “copy xyz.dll c:\xyz.dll” komutula dosyamızı istediğimiz yere kopyalayabiliriz.
Gözünüz korktu di mi
Düşünün bunlardan en az 200 tanesinin yedeğini almak istediğinizi,
Çözüm Kısa yolumuz :
- Basit olarak hazırladığım şu kodu kullanabilirsiniz :
- dllisimleri.txt dosyasının içeriğini de aşağıdaki gibi yaparsanız, istediğiniz dosyaları hemen alabilirsiniz;
- Başka bir kolaylık olarak Gac_MSIL klasörüne girdiğinizde dir /p, komutuyla command prompt dan tüm isimleri tarayabilirsiniz. Bu sayede tek tek kopyalamak zorunda kalmaz, rahatınıza bakarsınız…
FileStream fs = new FileStream("c:\\dllisimleri.txt", FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs);
string arguments;
string read = sr.ReadLine().Trim();
string read1 = sr.ReadLine().Trim();
while (read != null)
{
Console.WriteLine(read);
try
{
File.Copy("c:\\\\WINDOWS\\assembly\\Gac_MSIL\\" + read + "\\"+read1+"\\" + read + ".DLL", "C:\\\\DLL\\" + read + ".dll");
read = sr.ReadLine().Trim();
read1 = sr.ReadLine().Trim();
}
catch (Exception ex)
{
break;
}
}
xyz1
1.0.0.0__916a267ef328a0b9
xyz2
1.0.0.0__b715a15ad90d37db
xyz3
1.0.0.0__f4df43ff1813a7d4
xyz4
1.0.0.0__71e9bce111e9429c
buradaki xyz, kopyalamak istediğiniz dll dosyalarının ismi (.dll olmadan),
1.0.0.0__916a267ef328a0b9 bilgilerini de yukarıda anlattığım gibi hazırlayabilirsiniz.



