Etiket: GAC

Export DLL From Assembly

Aralık 28th, 2008

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…

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

DLL dosyalarınızı GAC’a tek tık ile atmanın yolu!!!

Kasım 5th, 2008

Regeditde yapacağımız küçük bir değişiklik ile, DLL imizin üzerine sağ tıklayıp, şekildeki gibi GAC-IT dediğimizde Global Assembly Cache(GAC)’e otomatik olarak dll’imizi yükleyebiliriz.

Gac IT

Yapmamız gerekenler :

  1. Yeni bir txt dosyası oluşturuyoruz.
  2. Dosyanın içine aşağıdaki kodları yazıyoruz
  3. Windows Registry Editor Version 5.00

    [HKEY_CLASSES_ROOT\dllfile\shell\GAC-It\command]
    @=”c:\\windows\\Microsoft.NET\\Framework\\v1.1.4322\\gacutil.exe /i \”%1\”"

  4. Dosyayı .reg uzantılı olarak kaydediyoruz ve herşey tamamladıktan sonra çift tıklamamız yeterli…

..source..

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