Export DLL From Assembly

Pazar, Aralık 28th, 2008 @ 00:24

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.

assembly

assembly

ş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 :

  1. Bir adet command prompt açın,
  2. c:\\Windows\Assembly\GAC veya c:\\Windows\Assembly\GAC_MSIL klasörlerinden birinde istediğiniz DLL dosyasını bulun
  3. Ö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.
  4. Daha sonra aşağıdaki şekildeki gibi xyz.dll dosyası Assembly klasöründe bulunur ve dosyanın özelliklerine gidilir.assembly1
  5. 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.
  6. 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 :

  1. Basit olarak hazırladığım şu kodu kullanabilirsiniz :
  2. 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;
    }
    }
    
  3. dllisimleri.txt dosyasının içeriğini de aşağıdaki gibi yaparsanız, istediğiniz dosyaları hemen alabilirsiniz;
  4. 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.

  5. 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…

İlişkili Yazılar :

  1. Assembly Key Yaratma
  2. DLL dosyalarınızı GAC’a tek tık ile atmanın yolu!!!
  3. Assembly’yi Klasörler Halinde Görme
  4. Dataset ya da Datatable’dan Excele Bilgi Aktarma || Export Excel From Dataset, Datatable
  5. Web Servis Kullanarak Güncel Hava Durumunun Gösterilmesi
  6. Google Translate Kullanarak .NeT de Dil Çevrimi
  7. .NeT’de Blok Olarak Seçme
  8. C# da Ping Atmanın En Kolay Yolu
  9. XSD Şemasından .NeT Classı Üretmek
  10. C#’da Command Komutları

Tags: , , ,
Posted in .NeT 2008, Sharepoint | No Comments »

Önceki Yazı << Sonraki Yazı >>

Leave a Reply