Oluşturduğumuz web kontrollerinin ihtiyaç duyduğu script, stil dosyası, imajlar gibi dosyaları assembly içine gömerek kontrol ile birlikte kolayca dağıtılmasını sağlayabiliriz.
Bu durum dağıtım avantajının yanında bant genişliği ile ilgili bir dezavantajı beraberinde getirmektedir. Web kaynağı olarak assembly içine gömdüğümüz her dosya sunucuya yapılan her istekte tekrar tekrar sunucudan yüklenecek ve gereksiz yere bant genişliğini işgal edecektir. Bu yüzden bu tekniği kullanırken bu ödünleşmenin farkında olarak seçimizi yapmanız gerekmektedir.
Bu tekniğin kullanımını (Makalelerde eksik kalan yönlere de değinerek) sizlerle adım adım paylaşmaya çalışacağım.
Öncelikle bir sınıf kütüphanesi projesi içinde bir özelleştirilmiş bir sunucu kontrolü sınıfı oluşturduğumuzu varsayalım… (Kendi Sunucu Kontrollerimizi Oluşturmak)
Bu sunucu kontrolü firma logo imajının altında firma adının yazdıran bir kontrol olsun. İlgili kontrolün render metodunu bu amaçla değiştirmiş olalım.
Bahsi geçen firma logosunun assembly içine gömülü olarak dağıtılmasını ve oradan kullanılmasını istiyorsak şu işlemleri adım adım gerçekleştirmeliyiz.
Kontrolün sınıf kütüphanesi projesi içinde bir klasör içine (Örneğin: Logo klasörü içine) logo imaj dosyasını ekleyin.
Visual Studio 2005 "Solution Explorer" penceresinde imaj dosyası seçili iken "Properties" penceresinde "Build Action" özelliği "Embedded Resource" olarak ayarlanmalı.
Kaynağa ulaşabilmek için sınıf kütüphanesi projesinin AssemblyInfo.cs dosyası (solution explorer properties klasörü içinde) içine şu satır eklenmeli…
Artık kontrol sınıf dosyasında render metodunda şu kodları yazarak oluşturulacak html metinlerinde gereken yerlerde kullanılabilir.
string ResourceURL=Page.ClientScript.GetWebResourceUrl(this.GetType(), fullResourceName);
Burada fullResourceName olarak verdiğimiz metin de "MyControl" assembly adı, "firmalogo.png" dosyanın adı ve bu metinler arasında yer alan "Logo" ise imajın yerleştirildiği klasördür.
Klavyeleriniz şen ola…
http://support.microsoft.com/kb/910442
How to embed resources in ASP.NET 2.0 assemblies
http://support.microsoft.com/kb/910445
Embedding Resources in ASP.NET 2.0 Assemblies
http://aspalliance.com/726