Makale Özeti

ASP.NET 2.0 da, tek bir web sitesi içinde C# ve VB.NET ile kodlanmış web formlarını birlikte kullanabilirsiniz. Bu web formları için gerçekten harika bir şekilde çalışır. Peki, farklı diller ile yazılmış sınıfları App_Code klasörü içinde kullanmak isteseydik ne yapardık? Böyle bir uygulamaya yani farklı dillerde kodlanmış sınıfların bir arada kullanımına varsayılan ayarlar ile ASP.NET içinde izin verilmiyor. Fakat, web sitemiz için yapacağımız bir kaç küçük ayar ile bunu gerçekleştirebiliriz. İşte bu makalede, bunu nasıl yapabileceğimizi göreceğiz.

Makale

C# ve VB.NET Sınıflarını, App_Code Klasörü İçinde Birlikte Kullanabilme

Makale özetinden de anlayabileceğiniz gibi aslında birçok yazılım geliştiricisi gibi benim de karşılaşmış olduğum bir problem üzerinde duracağız bu makalede. Birçok yazılım geliştiricisi projeye göre birçok dilde sınıflar yazmak zorunda kalabiliyor ve daha sonradan bunları birlikte kullanamayabiliyor. Ya da her bir geliştirici ortak bir projede farklı dilleri kullanarak sınıflar yazabiliyor. Bu farklı dillerde yazılan sınıfları hep birlikte bir web sitesi yaratırken kullanmak istedeğimizi varsayalım. İşte böyle durumlarda, yapacağımız ufak ayarlar ile hiçbir hata almadan, ASP.NET de farklı dillerde yazılmış sınıfları App_Code klasörü içinde kullanabiliriz.

Sınıfları ve Alt Klasörleri Yaratma

İşe VS.NET 2005 üzerinde yeni bir web sitesi yaratarak başlayalım ve ona App_Code klasörünü ekleyelim. Bunu Solution Explorer içinde, web sitesi üzerine sağ tıklayarak ve “Add ASP.NET Folder” seçeneğini seçerek kolayca yapabilirsiniz.

App_Code klasörünü ekler eklemez, Class1.cs ve Class2.vb isimli iki sınıfı bu klasöre ekleyin. Unutmayın sınıflardan biri C# için diğeri VB.NET olacak :) Şimdi aşağıda vermiş olduğum kodu Class1.cs dosyasına ekleyin.

Aynı şekilde aşağıdaki kodu da Class2.vb içine ekleyin.

Bu sınıfların her ikisi de, basitçe bir string döndüren HelloWorld() metodunu içeriyor.

Şimdi web sitesini derlemeye çalışalım. Bakalım ne olacak? Muhtemelen aşağıda da görebildiğiniz bir hata ile karşılaşacaksınız.

Hata mesajı, bize açık bir şekilde App_Code klasörü içinde farklı dillerde kodlanmış sınıfları kullanamayacağımızı ifade ediyor. Fakat bunu üstesinden gelmenin bir yolu var. İlk olarak, C# ve VB.NET sınıflarımızı, App_Code altında birbirinden farklı başka alt klasörlere almamız gerekiyor. İkinci olarak, ASP.NET derleyicisine niyetimizi açıkça ifade edebilmek için web.config içerisine bazı bilgiler eklememiz gerekiyor.

< codeSubDirectories > Bölümü

App_Code altında CSCode ve VBCode olarak adlandırılmış iki klasör yaratalım. Class1.cs sınıfını CSCode klasörüne ve Class2.vb sınıfını VBCode klasörüne taşıyalım.

Web sitemize bir web.config dosyası ekleyelim ve aşağıdaki bilgileri girelim.

Burada < compilation > bölümünü ekledik. < codeSubDirectories > bölümü, run-time da derlenen App_Code klasörüne bağlı alt klasörler tanımlamamıza olanak sağlar. directoryName özelliği, App_Code un hangi alt klasöründen bahsedildiğini belirler. Herbir alt klasör ayrı olarak derlenir ve böylece her biri farklı dillerde kodlanmış sınıflara sahiptir. Bu bölümde CSCode ve VBCode klasörlerini ekledik. Bu yolla, derleyici CSCode ve VBCode klasörlerindeki sınıfları ayrı ayrı derler.

Bu düzenlemeleri ve ayarları yaptıktan sonra, web sitemizi yeniden derlemeye çalışalım. Bu sefer sitemiz başarılı bir şekilde derlendi.

Son Değişikliklerden Sonra Test

Sınıflarımızı test etmek için bir web formu yaatalım. Aşağıda gösterildiği gibi de web formumuzu tasarlayalım.

Web formu bir RadioButtonList, bir Button ve bir Label dan oluşuyor. Seçime göre uygun sınıf kullanılıyor ve HelloWorld() metodundan dönen değer Label içinde gösteriliyor.

Şimdi aşağıdaki kodu Gonder butonunun Click olayına ekleyelim.

İşte hepsi bu kadar. Şimdi web formunuzu çalıştırıp, test edebilirsiniz.

Özet

Bu makalede, ASP.NET 2.0 ile yaratılmış bir web sitesinde; farklı dillerde kodlanmış sınıfları, App_Code klasörü içinde bir arada nasıl kullanabileceğimizi gördük.

Bir sonraki makalelerde görüşmek üzere. İyi çalışmalar...


Tayfun AKCAY

tayfun@tayfunakcay.com