C# Resources Kullanımı



Bir uygulamada kullanıdığımız kaynakları düşünürsek bunlar resimler,sesler ve yazılar(string) olabilir. Bu kaynakları bir pathden okutmak resource kullanmadan programımızı yazarken yapabileceğiz bir yaklaşımdır. Fakat en basitinden programımızın logosunu bir path içine attık oradan okuyoruz diyelim bu programı başka bir bilgisayara kurduğumuzda ayni pathi oraya taşımak zorunda olacağımızı gösterir veya taşıdık diyelim yalnışlıkla silinme tehlikesi vardır. Bununla birlikte derlenmiş programımızın farklı dillerdeki versiyonları olabilir. Bu durumda her dil için bir string kaynak dosyası(resource file) hazırlamamız yetecektir.

Kısacası resource yönetimi bize istediğimiz kaynakları exe içerisine gömmemize olanak sağlar. Resource dosyaları *.resx ve *.resource uzantılıdır. Şimdi bunları nası projemize ekleriz ve kullanırız onu bir görelim.

Resx uzantılı dosya Xml tabanlı bir dosyadır. Kaynak değerleri anahtar-değer çiftleri şeklinde saklar. Xml tabanlı oluğu için programcılar tarafından kolayca okunabilir. Assembly içerisine doğrudan eklenmezler.

Assembly içerisine doğrudan eklenen dosya kaynakları binary formatta tutan resource uzantılı dosyadır.

Aslında System.Resource altında bulunan ResourceWriter sınıfı ile kod ile bu kaynakları projemize ekleyebiliriz ama tabiki Visual Studio IDE'miz ile bu çok daha kolay bir şekilde yapılabilmektedir. Şimdi gelin buna bir bakalım :

Bunun için öncelikle projemize sağ tıklayıp Add -> New Item diyerek yeni öğe ekleme ekranına gelmeliyiz.

C# Resources Kullanımı,.Net Resource Yönetimi,resx,resources

Ardından açılan öğe ekleme ekranından Resources File seçerek programımıza *.resx uzantılı dosya ekleriz.

C# Resources Kullanımı,.Net Resource Yönetimi,resx,resources


*.resx dosyasını ekledikten sonra bize sadece istediğimiz kaynakları bu dosyaya eklemek kalıyor. Bunun için oluşturduğumuz resx dosyasını çift tıklayıp açmamız ve Add Resource tabını kullanabiliriz.


C# Resources Kullanımı,.Net Resource Yönetimi,resx,resources

Görüldüğü gibi Add Resource tabıyla resource dosyamıza istediğimiz kaynakları ekleyebiliriz. Bu kaynakları eklediğimizde Solution Explorer’ da Resources isimli bir klasör açıldığı göreceksiniz. Kaynak olarak eklediğimiz tüm dosyalar bu klasör altına otomatik olarak taşınacaktır.

C# Resources Kullanımı,.Net Resource Yönetimi,resx,resources



Peki Resources klasörümüz burda, resx uzantılı dosyamız burda peki kaynakları binary formatında saklayan resources uzantılı dosyamız nerede? Bu dosya obj klasörü altındaki debug klasörüne otomatik olarak atılmaktadır. Bu resources dosyamız Projemizinismi. + resx dosyamıza verdiğimiz isim + .resources şeklinde isimlendirilir. Mesala bizim örneğimizde yaratılan resources dosyasının ismi WindowsApplication2.Resource2.resources olmuştur. Bu işlemleri doğru bir şekilde yaptıysak şu anda resoruce dosyamız içerisinde yer alan kaynaklar exe uzantılı assembly içerisine dahil edilmiştir. Buda, uygulamamızın exe dosyasını alıp başka bir adreste (örneğin başka bir makinede) çalıştıracak olursak, assembly içerisine gömülen kaynakların kullanılabileceği anlamına gelmektedir. 

C# Resources Kullanımı,.Net Resource Yönetimi,resx,resources


ResourceManager  

Assembly içerisine gömülen kaynak dosyalarına ulaşabilmek için ResourceManager sınıfından yararlanırız. Mesela örneğimizde deneme.gif dosyasını eklemiştik şimdi bu resim dosyasına nasıl ulaşıp ele alabiliriz onu bir görelim :

ResourceManager resManager = new ResourceManager("WindowsApplication2.Resource2", Assembly.GetExecutingAssembly());
pbImage.Image=(Bitmap)resManager.GetObject("deneme");
resManager.ReleaseAllResources();
 
Burada deneme bir resim dosyası olduğu için resources dosyası içinde binary şekilde yer olur o yüzden örneğimizde bu resmi bir PictureBox içerisine atamak için Bitmap'e çevirmemiz gerekmektedir. Resources içerisinden bir string çekmek istiyorsak böyle bir şeye ihtiyaç duymayacaktık.

Bir yazımızında daha sonuna geldik. Bu yazımızda Resources kullanımıyla ilgili bir giriş yaptık. Bir sonraki yazım yine Resource kullanımı ile ilgili olacak bu sefer resources dosyalarını kullanarak nasıl Localization işlemleri yapılır bunu öğrenip anlatmaya çalışacağım. Bu yazı bloğumdaki 100. yazı olmasından dolayı önemli bir yazıydı benim için ayni zamanda da hem benim için hem sizin için yararlı olacağına inanıyorum. Umarım yararlı olmuştur herkes için..Hoşçakalın..

Yararlanılan Kaynaklar : Burak Selin Şenyurt: İlk Bakışta .Net Resource Yönetimi


5 yorum :

  1. eline sağlık gerçekten açıklayıcı bir makale olmuş

    YanıtlaSil
  2. Harika bir makale olmuş eline sağlık ama bunu Resource Manager yerine resource reader kullansaydık nasıl kullanablirdik

    YanıtlaSil
  3. elinize sağlık, şunu yapabilirmiyiz, windows ta shell32.dll içerisinde icon dosyaları kullanılmakta biz de buna benzer bir işlemi resource kullanarak yapıp başka bir uyugulamada bunu kullanabilirmiyiz, yani bir icon kütüphanesi gibi

    YanıtlaSil
  4. Güzel bir yazı olmuş emeğine sağlık

    YanıtlaSil