Makale Özeti

Bu makalemizde mobil cihazlar üzerinde çalıştırılacak olan .Net Compact Framework 2.0 Assembly’ lerinin mobil cihazımızın Global Assembly Cache’ i içerisine nasıl ekleyeceğimiz ile ilgili anlaşılır bir örnek geliştireceğiz.

Makale

.Net Framework kullanılarak geliştirilen masaüstü Windows uygulamalarında bildiğimiz üzere uygulama geliştiriciler geliştirdikleri uygulamalarının kullandıkları & refere ediyor durumda oldukları .Net Assembly’ lerini işletim sisteminin kök klasörü içerisinde bulunan Assembly klasörü içerisindeki havuzdan kullanabilmektedirler. Daha açık ifade etmek gerekirse Global Assembly Cache ismi ile ifade edebileceğimiz bu merkezcil havuz mekanizması yardımı ile birden çok uygulamanın aynı zaman sürecinde ihtiyaç duydukları assembly’ leri tek bir noktadan kullanılabilmesine olanak sağlayan bu sistem aynı assembly’ nin disk üzerinde defalarca kopyalanması ihtiyacına cevap olmaktadır.

Şekil üzerindende anlaşılabileceği üzere .Net Framework DLL’ lerinin tümü bu merkezcil havuz üzerinde kayıtlı bulunmakta ; bu DLL lere ihtiyaç duyan tüm uygulamalar aynı lokasyon üzerinden DLL’ in kopyasını oluşturmaya gerek duymadan rahatlıkla kullanabilmektedirler.

Global Assembly Cache ; kısa adıyla GAC’ ın sağladığı en mantıklı fayda ise aynı DLL’ in disk üzerinde bu DLL’ i her kullanan uygulama için defalarca tekrar tekrar kopyalanması yerine sunduğu merkezcil yapı olarak ifade edilebilmektedir. Bunun yanı sıra DLL’ in disk üzerinde oluşturulmuş tek bir kopyasının böyle bir havuz içerisinde uygulamala sunulmasının versiyonlama perspektifinden de fayda sağladığı çok açık bir şekilde farkedilebilmektedir.

Fakat günümüzdeki masaüstü bilgisayarlarının donanımsal yeterliliğini göz önünde bulundurduğumuzda disk alanı bakımından aslında çokta sorun yaşanmayacağını ; fakat merkezcillik açısından fayda sağlayacağı açık bir gerçektir.

Bu noktada makalemizinde konusunun temelini oluşturan önemli bir nokta üzerinden yazımıza devam edelim.

Bilindiği üzere uzun yıllardan beri mobil cihazlar üzerinde yaşanan bellek & donanım sıkıntıları uygulama geliştiricilerin başına dert olmaktadırlar. Bu tip cihazlara uygulama geliştiren uygulama geliştiriciler her türlü ihtimali göz önünde bulunduracak şekilde mobil cihaz uygulamalarını geliştirmekte ; yaşanabilecek bellek sıkıntılarının önüne geçebilmek adına ise uygulamalarda gerçekleştirilebildiği kadar kısma işlemine gitmektedirler (Thin Client).

Bu makalemizde ise belki gördüğünüzde “budamı vardı ?” diyebileceğiniz bir konu ile ilgili ; .Net Compact Framework DLL’ lerinin mobil cihazınız üzerinde Global Assembly Cache içerisine kopyalanarak merkezcil bir yapı üzerinden bellek tasarrufunun nasıl sağlanabileceği ile ilgili anlaşılır bir örnek uygulama geliştireceğiz.

Bu noktada konunun daha rahat anlaşılabilmesi açısından teorik ifadelerden öte pratiksel bakımdan çalışmaya hemen başlayalım. Senaryomuz gereği uygulamamız içerisinde basit bir executable uygulama ; bu uygulamanın kullandığıda bir DLL refere olarak kullanılacaktır. Gerçekleştirmek istiyor olduğumuz temel senaryo ise uygulamanın bu DLL’ e lokal lokasyonundan değilde ; mobil cihazımızın işletim sistemi içerisindeki Windows klasörü içerisinden merkezcil olarak ; GAC aracılığıyla erişecek olduğudur.

Hiç vakit kaybetmeden örnek uygulama üzerinde çalışmaya başlayalım. Konu ile ilgili önemli gereksinimler yazı içerisinde detaylı olarak anlatılacaktır.

İlk noktada GACAssembly isminde bir Mobil Cihaz Class Libraryı projesi açıyoruz.

Bu proje içerisine standart olarak eklenen fiziksel cs dosyasının ismini clGAC.cs olarak değiştiriyor ; şekildeki sınıfı fiziksel dosya içerisine ekliyoruz.

Projemizi build ediyoruz ve GAC’ a atılmak üzere geliştiriyor olduğumuz DLL ile ilgili “çok önemli” gerçekleştirmemiz gereken birkaç adım üzerinden uygulamamıza devam ediyoruz.

Bilindiği üzere bir DLL’ in GAC’ a atılabilmesi için gerçekleştirilmesi gereken en önemli adım DLL’ in Strong Name bir DLL olmasıdır. Bu noktada aynı yapı mobil cihazlar üzerindeki sistem içinde geçerlidir.

Mobil cihazlar üzerinde bir DLL’ in cihaz üzerinde GAC’ a gönderilebilmesi için DLL’ in strong name bir DLL olması gerekmektedir. Bu noktada strong name key file üretmek için Visual Studio 2005 Command Prompt penceresi üzerinden :

Şekildeki komutu çalıştırarak c:\Key.snk lokasyonunda bulunacak bir strong name key file oluşturuyoruz. Sıra geldi bu Key file ile DLL’ imizi ilişkilendirmeye. Bu noktada projenin özellikleri içerisinde bulunan Signing sekmesi içerisinde key dosyamızı DLL ile ilişkilendirip projeyi build ediyoruz.

İşte bu kadar ! Konu ile ilgili gerçekleştirilmesi gereken tüm işlemlerin neredeyse hepsi gerçekleştirilmiş durumda.

Sıra geldi test amaçlı geliştirilecek olan mobil cihaz uygulamamıza. Bu uygulama içerisinde senaryo gereği DLL içerisinde tanımlı olan sınıfımızın bir instance’ ı oluşturulacak ; kısaca uygulama bu DLL’ e ihtiyaç duyacak şekilde tasarlanacaktır.

Hiç vakit kaybetmeden mobil cihaz uygulamamızı geliştirmeye başlayalım. İlk noktada standart bir Mobil Cihaz Windows projesi açarak işe başlıyoruz.

Hız kesmeden uygulamamızı geliştirmeye devam ediyoruz. Amaç bir önceki adımda geliştirmiş olduğumuz DLL’ i kullanan standart bir uygulama geliştirmek olacaktır. Bu noktada ilk olarak DLL’ i projemize refere ediyoruz. Dikkat edilecek unsurlardan birisi ise DLL referansının Copy Local özelliğine false değeri verilmiş olduğudur. Bu değer DLL’ in uygulamanın çalıştırılıyor olduğu işletim sisteminin GAC’ ı üzerinden erişileceği anlamına geliyor olmaktadır.

Bir sonraki adımda şekildeki 3 satırlık kod bloğunu uygulama ekranının yüklenmesi esnasında çalıştırılacak şekilde tasarlıyoruz.

Ve bitti ! Uygulamamızı build ediyor ve ilgili adımları gerçekleştirmek üzere makalemize devam ediyoruz.

Bu noktada bir DLL’ in mobil cihazımız üzerindeki GAC’ a atılabilmesi için DLL’ in mobil cihaz üzerinde bir klasöre kopyalanmış olması gerekmektedir. Biz örnek olarak mobil cihazımızın kök klasörü içerisinde bulunan GACFiles isimli bir klasörün içerisine DLL’ imizi kopyalayacak ; bir sonraki adımda ise bu noktadan GAC’ a göndereceğiz.

DLL’ i mobil cihazımız üzerine kopyalamadan önce gerçekleştirmemiz gereken bir diğer önemli adım ise DLL’ in mobil cihaz üzerindeki fiziksel lokasyonunu belirten *.gac uzantılı bir metin dosyası oluşturmamız gerekliliğidir.

Hazırlanan bu dosyayı mobil cihazımız üzerinde bulunan Windows klasörü içerisine kopyalamamız gerekmektedir. Hiç vakir kaybetmeden *.gac uzantılı bu dosyayı oluşturuyor ; içerisine az sonra mobil cihazımız içerisine kopyalayacak olduğumuz DLL’ in adresini tanımlıyoruz.

Dosyayı *.gac uzantısıyla kayıt ediyoruz.

İşte bu kadar ! Sıra geldi üç dosyayı ilgili lokasyonlara kopyalarak GAC’ a kopyalama işini gerçekleştirmeye. Başka bir makalemizde ifade ettiğimiz üzere mobil cihazımız ile paylaşımlı kullanılacak şekilde bir klasörün içerisine EXE, DLL ve GAC Dosyalarını kopyalıyoruz.

Sıra geldi uygulamamızın en heyecanlı noktasına. Bu dosyalara bu klasör ile haberleşebilecek şekilde konfigüre edilmiş bir emülatör yardımıyla erişeceğiz ve sırasıyla şu adımları gerçekleştireceğiz :

Emülatörümüz üzerinde kök dizin içerisinde GACFiles isimli bir klasöre oluşturacak ; GACAssembly isimli DLL’ imizi bu klasörün içerisine kopyalacağız. GACSample.gac isimli dosyamızı Windows klasörü içerisine kopyalayacağız. Ve son olarak GACSample.exe isimli uygulamamızı çalıştırmaya çalışacağız.

.Net Compact Framework lokal lokasyon içerisinde DLL’ i bulamayacağından GAC içerisine bakacak ; ilk istekte bu lokasyondada bulamadığı için *.gac uzantılı dosya içerisinde dosyanın gerçek lokasyonuna erişecek ; ve bu lokasyondan DLL’ i GAC içerisine taşıyacaktır. Hepsi bu kadar !

Hiç vakit kaybetmeden ilgili işlemleri gerçekleştiriyoruz :

Emülatör içerisinde dosyalara erişebilmekteyiz. İlk olarak DLL’ imizi GACFiles isimli kök klasörün içerisine taşıyoruz.

Bir sonraki adımda *.gac dosyamızı Windows klasörü içerisine taşıyoruz :

Ve sıra geldi uygulamamızı çalıştırmaya ! Normal şartlarda uygulama DLL’ i bulamadığı için hata vermesi gerekmektedir. Ama senaryomuz ve yapı gereği DLL GAC içerisinde aranacak ; bulunamadığı durumda ise gerçek lokasyonundan GAC içerisine taşınacaktır. Uygulamamıza tıklayarak çalıştırıyoruz :

Bingo ! Uygulamamız DLL lokal lokasyonda olmamasına rağmen başarılı bir şekilde çalıştırılmıştır. GACFiles içerisine baktığımızda DLL’ in olmadığını rahatlıkla farkedebiliriz :

Çünkü DLL’ imiz .Net Compact Framework tarafından GAC içerisine taşınmıştır :

İşte buda kanıtı !

Bu makalemizde mobil cihazlar üzerinde GAC kullanımına değindik. Başka bir makalede daha görüşmek dileğiyle.


Ekin ÖZÇİÇEKÇİLER
Microsoft Certified Trainer
ekin.ozcicekciler@bilgeadam.com
MCP, MCAD.NET, MCSD.NET, MCSD.NET, MCTS, MCPD Ent.