.NET Standard ile Oluşturulan Projenin Farklı Platformlardaki Uygulamalarda Ortak Kullanımı

Gürkan Şafak
Bimar Teknoloji Blog
4 min readApr 29, 2022

.NET Standard ile ilgili belki birşeyler duydunuz ama tam olarak neye hizmet ettiğini merak ediyorsanız bu yazı tam size göre. Gerçek dünyadaki bir örnek üzerinden bu library’nin hangi eksikliği kapattığına gelin birlikte bakalım. Tek taşla 2 kuş vurmaya hazır mısınız? :)

.NET Standard’ı Microsoft’un .NET Core ve .NET Framework versiyonlarını bir arada destekleyen ortak bir base kütüphanesi olarak düşünebiliriz. Microsoft kendi sitesindeki bilgilendirmede farklı platformların ortak kütüphaneler ile desteklenmesi gerektiği durumlarda .NET Standard altyapısı ile devam edilebileceğine işaret ediyor.

https://docs.microsoft.com/en-us/dotnet/standard/library-guidance/cross-platform-targeting

Şimdi bu kütüphanenin gerçek hayattaki bir kullanım örneğine bakalım. İhtiyacımız olan şey “LLBLGEN” ile oluşturduğumuz sınıfları hem .Net Framework 4.8 hem de .Net 6 ile yapılandırılmış projede kullanabilmekti. Yani data access katmanındaki sınıfları hem WebForm hem de .Net Core uygulamasına uyumlu olarak hizmete sunabilmek.

Kısa bir bilgilendirme yapmak gerekirse bir ORM(Object Relational Mapping) aracı olarak LLBLGen, veritabanında oluşturulan tablolara karşılık gelen sınıfların kod içerisinde kullanılmasına yardım eden, CRUD işlemlerini mevcut kodumuz üzerinden zahmetsizce yönetmemizi sağlayan bir yazılımdır. Bu yazılımı kullanarak ürettiğimiz DLL’leri projemize ekleyerek veritabanı işlemlerimizi daha yönetilebilir hale getiriyoruz. Java’da Hibernate veya .NET tarafındaki Entity Framework muadil yapılar olarak örneklendirilebilir. Detaylı bilgiye sitesinden erişebilirsiniz. https://www.llblgen.com/

Hali hazırda LLBLGen üzerinden generate ettiğimiz kaynak kodumuzun target framework versiyonu .NET Framework 4.6 şeklinde ayarlanmıştı. Mevcuttaki WebForm projemizde LLBLGen üzerinden oluşan kaynak kodları derleyip buradan oluşan DLL’leri sorunsuz bir şekilde kullanıyor ve veritabanı işlemlerini gerçekleştiriyorduk. Bu DLL’leri aynı zamanda .NET Core ile yapılandırılmış bir projede de kullanma ihtiyacımız doğmuştu.

Mevcut WebForm projesinde kullandığımız DAL(Data Access Layer) DLL’lerinin .NET Core tarafındaki Oracle.ManagedDataAccess.Core kütüphanesiyle uyumlu çalışıp çalışmayacağını hızlıca test ettik. 4.6 Framework ile generate edilmiş sınıflardan oluşan DLL’lerimiz mevcut projemizde (WebForm) Oracle.ManagedDataAccess ile sorunsuz çalışıyordu. Fakat aynı DLL’ler .NET Core için kullanmamız gereken ManagedDataAccess.Core ile uyumlu çalışmadı. Biraz araştırma yaptıktan sonra ihtiyacımız olan yönlendirmeye LLBLGen’in sitesindeki dokümanlardan ulaştık.

Eğer LLBLGen üzerindeki kod generate işleminde target framework’ü .NET Standard olarak ayarlarsak buradan elde ettiğimiz sınıflardan üretilen DLL’leri hem .NET Core hem de .NET Framework XX ile yapılandırılmış herhangi bir projede kullanabileceğimizi öğrenmiştik. Hedefimiz LLBLGen üzerinden, kodları target framework .NET Standard seçerek oluşturulmasıydı.

Bu aşamada LLBLGen arayüzü üzerinden kodları generate ettiğimiz esnada hangi target framework’ü seçmek istediğimizi bize sunan bir alan bulunuyor. Aşağıda yeşil çerçeve ile görünen kısım bizim istediğimiz DLL’lerin oluşabilmesi için .NET Standard olarak seçilmesi gerekiyordu.

Eğer default olarak burada .NET Standard seçimi çıkmıyorsa Tools>Presets Viewer sekmesinden açılan kısımda .NET Standard seçiminin çıkması için .preset uzantılı dosya içerisinde bir değişiklik yapmanız gerekiyor. Aşağıda sarı ile işaretli “Edit As Xml” butonuna tıkladığınızda xml tabanlı bir dosya karşınıza çıkacak.

Bu dosya üzerinde aşağıdaki .NET Standard 2.0 satırını ekleyip kaydediyoruz.

Artık generate adımındaki target framework kısmında .NET Standard 2.0 seçimi görünür durumda olacak.

Ayarlamaları bu şekilde yaparak DAL sınıflarını .NET Standard ile generate edip sonrasında bu DLL’leri WebForm ve .NET Core uygulamalarına referans vererek kullanılabilir duruma gelmiş oluyor.

.NET Standard gibi bir library olmasaydı hem WebForm hem de .Net Core uygulamamız için ayrı ayrı 2 kez generate işlemi yapmamız gerekecekti. Bu durum geliştirim aşamasında bize ekstra zaman maliyeti ve hataya açık bir yapı demekti. Bu yöntem ile bu tür sorunlar yaşamadan daha stabil ve sürdürülebilir bir yapıya kavuşmuş olduk.

Umarım .NET Standard kütüphanesinin hangi durumda kullanılabilir olduğuyla ilgili gerçek dünyadaki bir sorundan yola çıkarak verdiğim örnek senaryo faydalı olmuştur.

--

--