2014 yılı itibariyle Microsoft’un uygulama geliştirme platformu olan .NET Framework’ün önemli bir dönüşümüne şahit oluyoruz. Açık kaynak olmayan ve resmi sürüm olarak sadece Windows işletim sistemlerinde çalışan .NET Framework’ün çekirdek sürümü .NET Core‘un hem açık kaynak olacağı hem de platformdan bağımsız şekilde çalışacağı duyurulmuştu. Geçmişte Mono isimli bir proje ile resmi olmasa da .NET Framework’ün Linux sistemlerde çalışması sağlanmıştı.
Microsoft’un bu hamlesiyle artık resmi olarak açık kaynak kodlu ve platformdan bağımsız çekirdek versiyon bir .NET Framework dağıtımı hayatımızda olacak. Yani .NET Core ile Linux ve MacOS işletim sistemlerinde uygulama geliştirebilecek ve uygulamalarınızı çalıştırabileceksiniz.
ASP.NET Core yakın zamana kadar ASP.NET 5 ismiyle anılıyordu. Geçtiğimiz haftalarda yayınlanan resmi bir yazı ile artık ASP.NET 5 yerine ASP.NET Core olarak isimlendirileceği belirtildi.
Geçen zaman içinde .NET Core gelişimini tamamlama noktasına geldi. Bilhassa bu platform üzerine inşa edilen ve web uygulamaları geliştirmek için kullanılacak ASP.NET Core için önemli çalışmalar yapıldığını söyleyebiliriz. Öyleki Microsoft, Linux ve MacOS kullanıcılarının bu ortama ısınmaları ve kolayca adapte olmaları için Visual Studio Code isimli kod editörünü geçtiğimiz aylarda duyurmuştu. Microsoft’un açıkladığı yol haritasına göre .NET Core ve ASP.NET Core’un 2016 yılı içerisinde RTM ve resmi sürümler olarak yayınlanması bekleniyor. (Kaynak-1, Kaynak-2)
Tabii ki bu yenilikler ve gelişmeler biz yazılımcıların aklına ASP.NET Core nasıl bir yapı sunuyor, neler getiriyor, neleri götürüyor, ASP.NET Core klasik ASP.NET’in devamı mı yoksa farklı bir sürümü mü… gibi birçok soruyu da getiriyor. Kısaca değinelim…
Yazının geri kalan kısmında .NET Framework üzerinde çalışan ASP.NET’i “klasik ASP.NET” olarak adlandıracağım. Microsoft literatüründe böyle bir tanım var mı bilmiyorum, yanlış bir atıf olur mu, sanmıyorum ama karşılaştırmalar net anlaşılsın diye bu ifadeyi kullanacağım.
ASP.NET Core ve .NET Core Yazılım Geliştiricilere Nasıl Bir Yapı Sunuyor?
.NET Core’un temel amacı ASP.NET Core ile web uygulamaları geliştirilmesini sağlamak(en azından şimdilik). Zira .NET Core ile sadece web uygulamaları ve konsol(console) uygulamaları geliştirebilecek. Yani Windows Forms, Windows Service, WPF vb. uygulamaları bu ortamda şimdilik geliştiremiyoruz.
.NET Core için .NET Framework’ün basitleştirilmiş çekirdek versiyonu. .NET Core, CoreFX adındaki sınıf kütüphanesinden oluşmakta ve CoreCLR adındaki runtime üzerinde çalışmaktadır. Managed bir ortama sahip olduğunu, JIT derleyicisinin ve Garbage Collector(GC)’un aynen muhafaza edildiğini söylemekte fayda var. CoreFX System.IO, System.Collections gibi birçok System.* ve Microsoft.* bileşenlerini içermektedir. Detaylar için CoreFX Github repo‘sunu inceleyebilirsiniz.
Çekirdek bir .NET Framework versiyonu olduğu için daha önceden .NET Framework 4, 4.5 gibi sürümlerde uygulama geliştirenler kullandıkları bazı kütüphaneleri .NET Core’da bulamayabilir. .NET Core’un NuGet üzerinden dağıtımının yapılacağını da vurgulamakta fayda var, zira bazı System.* kütüphanelerini de yine NuGet’ten indirerek projelerinizde kullanabiliyorsunuz.
ASP.NET Core proje yapısının klasik ASP.NET projelerinden önemli farklılıkları var. web.config yerine JSON uzantılı farklı bir ayar dosyasının bulunması, Global.asax dosyasının olmaması, onun yerine benzer yapıda bir Startup dosyasının bulunması, uygulamanın başlangıçta en yalın halde çalışması ve sizin kullanılacak bileşenleri(statik dosya, directory browsing, debug modda çalışma… gibi) tek tek kayıt ederek kullanabilmeniz göze çarpan ilk farklılıklar.
Son olarak .NET Core’da desteklenmeyenleri belirtelim. Şimdilik sadece C# dili ile geliştirme yapabiliyoruz, yani VB.NET vb. .NET dillerini kullanamıyoruz. ASP.NET Core ile MVC ve Web API uygulaması geliştirebiliyoruz, WebForms şu an için desteklenmiyor.
ASP.NET Core, ASP.NET 4.5’in Devamı mı?
Hayır değil. ASP.NET Core, .NET Core üzerinde çalışıyor. .NET Core ise .NET Framework’teki temel kütüphanelerden oluşturulan ve farklı platformlar için daha sade hale getirilmiş bir .NET dağıtımı. Dolayısıyla ASP.NET Core ile klasik ASP.NET’in benzer kütüphaneleri kullanmasına rağmen farklı çatılar olduğunu söylemeliyiz. ASP.NET Core, klasik ASP.NET uygulamalarının devamı niteliğinde değil, klasik ASP.NET .NET Framework üzerinde ilerlemeye devam edecek.
Klasik ASP.NET Ne Olacak?
Microsoft’un ana geliştirme ortamı hâlâ .NET Framework, dolayısıyla ASP.NET’in gelişimine kaldığı yerden devam etmesini bekliyoruz. Klasik ASP.NET bitecek, devam etmeyecek, daha ilerlemez… gibi söylemler şu an gerçeklikten baya uzak. Scott Hanselman’ın “ASP.NET 5 is dead – Introducing ASP.NET Core 1.0 and .NET Core 1.0” başlıklı yazısı klasik ASP.NET’in sonu geldi diye yorumlayanlar olabiliyor, o yazıda söylenen ASP.NET 5 aslında ASP.NET Core’un önceki adı. Özetle klasik ASP.NET durduğu yerde durmakta, ASP.NET Core kadar ivmeli olmasa da gelişimine devam edecek.
Hangisini Seçmeli: Klasik ASP.NET vs. ASP.NET Core
Şu an aktif olarak ASP.NET 4.6 versiyonu kullanılan klasik ASP.NET, .NET Framework üzerinde çalıştığı için daha donanımlı, stabil ve kullanışlı. Dolayısıyla teknik donanımı ve yapılabilir şeyleri düşündüğümüz zaman klasik ASP.NET açık ara önde. Güçlü ve oturmuş yapısının yanında ASP.NET Core karşısında en önemli eksileri ise sadece Windows platformlarda çalışması ve performansı. Performans konusunu alt paragrafta detaylandıracağım.
ASP.NET Core’un şu aşamada klasik ASP.NET’ten daha donanımlı veya kullanışlı olmak gibi bir iddiası yok. Microsoft’un yakın vadedeki amaçlarından biri Core versiyonunu daha genişletmek ve klasik ASP.NET kıvamına getirebilmek. ASP.NET Core’un en önemli avantajı platformdan bağımsız olması ve artık Linux sunucularda dahi çalıştırılacak olması. .NET Core ile .NET Framework’ü sadeleştiren ve yeniden ele alan Microsoft takımının en çok odaklandığı noktalardan biri performans. Şu linkten yapılan test sonuçlarının detaylarını görebilirsiniz. Bilhassa Kestrel web sunucusu üzerinde çok dikkat çekici sonuçlar var. Hatta birkaç gün önce saniyede 1.15 milyon request’in üzerine çıktıklarını şu blog postuyla duyurup kutlamıştılar. Özetle ASP.NET Core’un gerek Linux gerekse Windows platformlarda klasik ASP.NET’e göre ciddi bir performans artışı olduğunu söylemeliyiz.
Şimdilik ASP.NET Core sadece ar-ge amaçlı seçilmeli, zira henüz kararlı bir sürümü hatta RTM sürümü dahi olmayan bir yapı üzerine uygulama geliştirmek biraz riskli. Release olduğunda ise artık gönül rahatlığıyla kullanılabilir, hatta geliştireceğiniz uygulama MVC veya Web API tarzında bir uygulama olacaksa ilk tercihiniz olmalı. Klasik ASP.NET’e göre sağlayacağı performans farkının yanında uygulamalarınızı Linux bir sunucu üzerinde host ederek sunucu maliyetlerinizi düşürebilirsiniz. Sunucularınız Windows ise ve Windows plarformlarında çalışıyorsanız klasik ASP.NET sizin için daha iyi bir tercih olacaktır, ama göz ucuyla ASP.NET Core’u incelemeye ve gelişmeleri takip etmeye şimdiden başlayın.
ASP.NET 5 Neden ASP.NET Core Oldu?
Aslında bir üstte bahsettiğimiz konu bu sorunun kısmen açıklaması niteliğinde. Mevcut ASP.NET versiyonları, .NET Framework versiyonları ile birlikte anılıyordu, ASP.NET 4, ASP.NET 4.5, ASP.NET 4.6… gibi. .NET Core üzerinde çalışacak ASP.NET versiyonuna ise ASP.NET 5 denilmesi kafa karışıklığına yol açıyordu, 5 versiyonlaması doğal olarak 4.5’in devamı algısı oluşturuyordu. Hatta “5 > 4.5, demek ki ASP.NET 5 önceki sürümlerin daha da gelişmişi…” durumunu akla getiriyordu.
Halbuki .NET Core, .NET Framework’ün devamı değil, sadeleştirilmiş bir yan ürünü. Bu noktada kafa karışıklığını gidermek adına isimlendirme değişikliğine gidildi ve bir ay kadar öncesinde bütün kaynaklarda ASP.NET 5 olarak geçen sürüm adı ASP.NET Core olarak değiştirildi.
Mevcutta bir çok ASP.NET 5 blog yazısı bulunduğu için kısa vadede kafalar yine karışmaya devam edecek, ama orta ve uzun vadede kafa karışıklıklarını ortadan kaldıracak bir isim değişikliği oldu bu.
Biz yazılımcılar yazdığımız metotlara isim bulmakta zorlanırken anlaşılan o ki Microsoft’taki ürün yöneticileri ve mimarlar da ürünlerini isimlendirmekte oldukça zorlanıyorlar.
Merhaba;
ASP.NET Core ile MVC 6 uygulaması geliştirmenin sadece AR-GE ile kısıtlandırılmasının nedenini anlayamadım! Tüm kaynak kodlarının Github da olduğu bir framework ü source gösterip tüm süreci gözlemleyebilir, hataları yakalayabilir ve bir talep (pull-request, issue) ile düzeltilmesini sağlayabilirsiniz! Go-Live lisansı ile production için de tercih edildiği özellikle vurgulanmaktadır!
Birde güzel yazınıza şu linkteki bilgileri de ilave edebiliriz
http://gencebaydemir.com/asp-net-5-ozellikleri-ve-mvc-6/
Log4Net, AutoMapper vb. bir proje için Github’da bulunup henüz release olmaması kullanmamak için çok büyük bir engel teşkil etmeyebilir. En kötü ihtimalle loglarınızı sağlıklı atamazsınız veya mapping’lerde başınız ağrır, gider AutoMapper yerine sorunu giderecek başka bir bileşen bulursunuz. Ancak burada bir framework’ten, uygulamanın çalışacağı runtime’dan, JIT derleyicisinden… bahsediyoruz. Yarın bu bahsi geçen bileşenlerden birinde önemli bir bug, güvenlik açığı vs. sorun çıktığında başınız ağrıyabilir. Microsoft gibi firmaların dahi bu tip sorunlara fix geçmesi bazen günler haftalar alabiliyorken, nasılsa Github’da kodlar var bir şekilde hallederiz demek biraz maceraperest olmak gibi geliyor bana.
Dediğimi yineliyorum; hobi amaçlı veya kişisel projelerde kullanılabilir, ama ben olsam kurumsal bir projede veya çok fazla kullanıcısı olan bir sitede ASP.NET Core’u kararlı bir sürümü çıkana kadar kullanmam. Hatta bir adım öteye gideyim, kurumsal projelerde Entity Framework, Log4Net vb. açık kaynaklı projelerin dahi release olmamış versiyonlarının kullanılmasını tavsiye etmem.
Hocam bari sen bu kadar basit bir yazı yazma. Yazı içerisinde ne bir inceleme ne bir görüş ne bir örnek var. Basın bülteni gibi bir şey olmuş.
Gayet açıklayıcı güzel bir yazı olmuş. Elinize sağlık demek daha doğru mu olur sanki
Gayet açıklayıcı bir yazı olmuş. İşin ABC sini gayet net açıklamışsınız hocam. Teknik detayları ve araştırmaları bu bilgiler ışığında yapmak anlamlı olacaktır.
Hocam ben oldukça faydalı buldum. Emeğinize teşekkür ederim. Yazıyı basit bulanlardan çok daha ciddi bir yazı yazmalarını en kısa sürede bekliyoruz :))
Bilgilendirmeler için teşekkür ederiz. Faydalı bir yazı olmuş.
Güzel bir yazı olmuş, teşekkürler.
1.0 versiyon bir ürün için “giriş seviyesi bir yazı” olarak nitelendirmek tamamen karalama çabası diye düşünüyorum. Elbette oldukça basit ve yüzeysel olacak. kaldı ki yazının içinde de geçiyor şuan Asp.net in yanında oldukça basit ve yeni..
Yıkıcı değil yapıcı olabilmek dileğiyle başarılı makalelerinizin devamı dileklerimle..
Güzel ve Faydalı bir yazı olmuş Teşekkürler.
Kafa karışıklığını giderecek bir yazı olmuş, devamını bekler teşekkür ederim.