Stronger_Cracker
- 25 Tem 2022
- 6,403 Mesaj
Aktiflik
Seviye
Deneyim
.NET ile .NET Core Arasındaki Farklar Nedir?
.NET Core ile Neler Geldi?
.NET Core ile Neler Geldi?
Yazılım dünyasında bazı kavramlar vardır; adı benzer diye insanı ilk bakışta ters köşe yapar. ".NET", ".NET Framework", ".NET Core", sonra bir de ".NET 5, 6, 7, 8, 9, 10" derken yeni başlayan arkadaşın kafada doğal olarak şu soru beliriyor:
"Abi bunlar aynı şey mi, farklı şey mi, hangisini öğreneyim, hangisi eski, hangisi yeni?"
Bu konuyu okumadan Udemyden eğitim satın almayın!
Bazen iş yerinde gelen öğrenciler arasın muhabbet ediyoruz biri ".NET biliyorum" deyince bazen olay şuna dönüyor:
— Hangi .NET?
— Şey... işte Visual Studio açılan...
— Tamam da Framework mü, Core mu, modern .NET mi?
— Ben bir su döküp geleyim... :S
İşte bu konu/rehber tam olarak o karmaşayı temizlemek için hazırlandı.
Bu rehberin amacı:
- .NET ile .NET Core kavramlarını karıştıran arkadaşların kafasını netleştirmek
- .NET Framework, .NET Core ve modern .NET hattını anlaşılır şekilde ayırmak
- .NET Core ile gelen yenilikleri öğretmek
- Gerçek proje tarafında hangi durumda ne tercih edilir, onu göstermek
- Herkesin anlaması için Birsite Forum mantığına ve siber güvenlik bakışına uygun örneklerle konuyu somutlaştırmak
- *(yıldız) olan yerlerde kaynaklarını ekleyeceğim oradan daha geniş öğrenmek isteyenler bakabilir. (Microsoft Learn resmi sitesi ve diğerleri)
1) Önce En Temel Ayrım: .NET, .NET Framework, .NET Core ve Modern .NET Nedir?
Konuya en doğru yerden başlayalım.
.NET aslında tek başına çoğu zaman bir geliştirme platformunu ifade eder. Yani çalışma zamanı (runtime), kütüphaneler, SDK, dil desteği ve uygulama geliştirme araçlarının genel çatısıdır. Microsoft’un güncel tanımına göre .NET; ücretsiz, açık kaynaklı, çok platformlu bir geliştirme platformudur.
Ama tarihsel olarak bu isim birkaç farklı uygulama ailesi için kullanıldı:
- .NET Framework → Eski, klasik, ağırlıklı olarak Windows odaklı yapı
- .NET Core → Daha modern, açık kaynaklı, çok platformlu yeni nesil başlangıç
- .NET 5 ve sonrası → .NET Core çizgisinin birleşmiş ve yeni adıyla devam eden hali
Yani çok kısa özet:
.NET Framework = eski klasik dünya
.NET Core = modernleşme hamlesinin ilk büyük adımı
.NET 5+ = artık "Core" adını bırakmış birleşik modern .NET dünyası
Buradaki en kritik nokta şu:
Bugün yeni bir proje geliştirilecekse, genel öneri modern .NET tarafıdır. Microsoft da yeni sunucu uygulamalarında varsayılan tercih olarak modern .NET’i öne çıkarıyor; .NET Framework ise daha çok mevcut eski uygulamaları sürdürme tarafında anlamlı kalıyor. *
2) .NET Framework Nedir?
.NET Framework, Microsoft’un yıllarca Windows üzerinde uygulama geliştirmek için kullandığı ana platformdu.
Bu yapıyla neler geliştirildi?
- ASP.NET Web Forms projeleri
- ASP.NET MVC 5 projeleri
- Windows Forms masaüstü uygulamaları
- WPF uygulamaları
- Eski kurumsal servisler
- IIS üstünde çalışan klasik web uygulamaları
- Ağırlıklı olarak Windows bağımlıdır (Winserver bağımlılığı)
- Eski kurumsal yapılarda hâlâ çok yaygındır(Çoğu devlet siteleri)
- Kütüphane ekosistemi çok geniştir
- Birçok kurumda yıllardır çalışan sistemler bu yapıdadır(ybs, ebys, obs, hbys, belediye iç yazılım, ön yüz siteleri)
- Özellikle "dokunma çalışsın" mantığıyla yaşayan uygulamalar
Örnek olarak:
Yıllar önce geliştirilmiş bir forum yönetim paneli düşünelim. Eğer bu panel klasik ASP.NET MVC 5 ile yazıldıysa, büyük ihtimalle .NET Framework tarafındadır. Yani .NET Framework kötü mü? Hayır.
Ama soru şu olmalı: Yeni bir proje için doğru tercih mi?
Çoğu yeni senaryoda cevap: Hayır, artık modern .NET daha doğru tercih. *
3) Peki Bu .NET Core Neden/Niye/Niçin Çıktı???
Microsoft neden "zaten .NET vardı" iken yeni bir yol açtı? Çünkü yazılım dünyası değişti.
Eskiden:
- Uygulamalar çoğunlukla Windows sunucularda çalışıyordu
- Monolitik yapı daha yaygındı (birbiriyle bağlantılı tek blokda birleşme)
- Bulut mimarileri bugünkü kadar baskın değildi
- Linux üstünde .NET çalıştırma beklentisi çok daha düşüktü
- Linux sunucular yaygınlaştı
- Docker ve container mantığı büyüdü
- Microservice mimarisi arttı
- Cloud-native yaklaşım önem kazandı
- Performans, modülerlik ve taşınabilirlik daha kritik hale geldi
- Açık kaynak ekosistemi ciddi beklenti haline geldi
4) .NET Core ile Birlikte Hayata Giren Büyük Yenilikler
Buraya dikkat. Çünkü asıl mesele "isim farkı" değil, mimari yaklaşım farkı.
4.1) Çok Platform Desteği (Cross-Platform)
.NET Framework temelde Windows odaklıydı.
.NET Core ise Windows, Linux ve macOS üzerinde çalışabilecek şekilde tasarlandı. Modern .NET dokümantasyonu da platformlar arası çalışma kabiliyetini temel özellik olarak anlatıyor. *
Bu ne işimize yarar? örnek Birsite.com için bir:
- forum API servisi
- bildirim servisi
- log analiz servisi
- siber güvenlik eğitim modülü geliştiriyor olsaydık, bunu sadece Windows Server’larında değil Linux sunucuda da koşturabilirsiniz.
- Maliyet optimizasyonu
- Linux/VPS dağıtımı
- Docker kullanımı
- Kubernetes ortamları (bu çok ayrı bir konu olabilir ama sizinde araştırmanızı isterim)
- Taşınabilir deployment
4.2) Açık Kaynak Yapı
.NET Core’un en büyük kırılmalarından biri open-source yaklaşımıdır. Bu sadece "kodlar görülebiliyor, oleyyy c/p yapabilirim" demek değildir.
Aynı zamanda:
- topluluk katkısı
- daha şeffaf geliştirme
- hızlı iyileştirme
- GitHub merkezli ekosistem (bana göre en büyük etkilerinden) anlamına gelir.
4.3) Yüksek Performans Odağı
Modern .NET hattı performans tarafına ciddi yatırım aldı. ASP.NET Core; hafif, modüler ve modern web yükleri için optimize edilen bir yapı olarak tanımlanıyor. Microsoft’un mimari rehberlerinde de ASP.NET Core’un modern, cloud-optimized ve lightweight yapısı vurgulanıyor. *
Bu neden önemli Örnek birsite.com üzerinde aynı anda:
- forum okunuyor
- kullanıcı girişi yapılıyor
- eğitim videoları listeleniyor
- sınav sonuç API’si çağrılıyor
- güvenlik logları analiz ediliyor
Özellikle siber güvenlik panellerinde ve log ekranlarında bu fark daha net hissedilir.
4.4) Modüler Mimari
.NET Framework daha büyük ve daha toplu bir yapıydı.
.NET Core ise daha modüler bir yaklaşım sundu.
Yani uygulama ihtiyacına göre bileşen kullanma mantığı güçlendi.
Bu yaklaşım:
- gereksiz bağımlılıkları azaltır
- uygulamayı hafifletir
- bakımı kolaylaştırır
- deployment boyutunu daha yönetilebilir hale getirir
4.5) Yerleşik Dependency Injection (DI)
ASP.NET Core tarafının en sevilen yeniliklerinden biri budur. Nedir bu ID:
Dependency Injection, sınıfların ihtiyaç duyduğu bağımlılıkların dışarıdan verilmesi mantığıdır. Microsoft’un ASP.NET Core temel dokümanlarında DI, framework’ün çekirdek yapı taşlarından biri olarak anlatılır. *
Bu ne kazandırır?
- Daha temiz kod
- Daha test edilebilir yapı
- Daha kolay bakım
- Loose coupling
- SOLID prensiplerine daha yakın mimari
Modern yaklaşımda bağımlılık dışarıdan verilir.
Örneklersek:
C#:
public interface IForumBildirimServisi
{
void BildirimGonder(string kullaniciAdi, string mesaj);
}
public class ForumBildirimServisi : IForumBildirimServisi
{
public void BildirimGonder(string kullaniciAdi, string mesaj)
{
Console.WriteLine($"{kullaniciAdi} kullanıcısına bildirim gönderildi: {mesaj}");
}
}
Servis kaydı:
C#:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddScoped<IForumBildirimServisi, ForumBildirimServisi>();
Kullanım:
C#:
public class SiberDuyuruController : Controller
{
private readonly IForumBildirimServisi _forumBildirimServisi;
...
public SiberDuyuruController(IForumBildirimServisi forumBildirimServisi)
{
_forumBildirimServisi = forumBildirimServisi;
}
public IActionResult Yayinla()
{
_forumBildirimServisi.BildirimGonder("ForumUyesi", "Yeni güvenlik duyurusu yayınlandı.");
return Ok();
}
...
}
Burada olay şudur:
- Controller, servisi kendi içinde new ile üretmiyor.
- Dışarıdan alıyor.
- Bu da profesyonel mimaride çok büyük fark oluşturuyor.
4.6) Middleware Mantığı
ASP.NET Core’da istek işleme hattı middleware pipeline mantığıyla kurgulanır. Microsoft bunu temel mimari yapı taşlarından biri olarak anlatır. *
Yani bir HTTP isteği uygulamaya gelirken belirli adımlardan geçer:
- Hata yakalama
- HTTPS yönlendirme
- Statik dosya işlemleri
- Kimlik doğrulama
- Yetkilendirme
- Loglama
- Özel güvenlik kontrolleri
Örnek senaryo:
birsite.com için admin paneline gelen her istekte:
- IP loglansın
- şüpheli user-agent kontrol edilsin
- belirli pattern’ler bloke edilsin
- yetkisiz erişim denemeleri kaydedilsin
Basit örnek:
C#:
var app = builder.Build();
app.Use(async (context, next) =>
{
var istekYolu = context.Request.Path;
var ipAdresi = context.Connection.RemoteIpAddress?.ToString();
...
Console.WriteLine($"İstek alındı | Yol: {istekYolu} | IP: {ipAdresi}");
await next.Invoke();
...
});
app.UseAuthentication();
app.UseAuthorization();
4.7) Yapılandırma (Configuration) Sistemi
ASP.NET Core’da ayarlar çok daha düzenli ve esnek şekilde yönetilir. Microsoft’un configuration dokümantasyonunda; uygulama ayarlarının JSON dosyaları, environment variable’lar, command-line ve diğer sağlayıcılardan beslenebildiği açıkça söylüyo.
Özellikle şu çok işe yarar:
- appsettings.json
- appsettings.Production.json
- Environment Variables
- Secret yönetimi
Örnek:
JSON:
{
"BirSiteAyarlar": {
"ForumAdi": "Birsite.com",
"KurumsalGrup": "turkhacks",
"MaksimumGirisDenemesi": 5
}
}
Bu değerleri kod içinde sabit gömmek yerine yapılandırmadan almak profesyonel iştir.
4.8) Yerleşik Loglama Altyapısı
Modern .NET tarafında loglama çok daha sistematik hale geldi.
Neden önemli?
- Hata ayıklama
- audit takibi
- siber olay inceleme
- performans gözlemi
- kullanıcı davranış analizi
- başarısız giriş denemeleri
- yasak URL erişimleri
- admin panel hareketleri
- kritik veri değişiklikleri
Basit Bir örnek:
C#:
public class GuvenlikOlayServisi
{
private readonly ILogger<GuvenlikOlayServisi> _logger;
...
public GuvenlikOlayServisi(ILogger<GuvenlikOlayServisi> logger)
{
_logger = logger;
}
public void SupheliGirisKaydet(string kullaniciAdi, string ipAdresi)
{
_logger.LogWarning("Şüpheli giriş denemesi | Kullanıcı: {KullaniciAdi} | IP: {IpAdresi}", kullaniciAdi, ipAdresi);
}
...
}
4.9) .NET CLI (Komut Satırı Araçları)
Modern .NET ile gelen büyük rahatlıklardan biri de .NET CLI oldu. Microsoft, .NET CLI’ı platformlar arası geliştirme, derleme, çalıştırma ve yayınlama aracı olarak tanımlanıyor.
Örnek komutlar:
Bash:
dotnet new mvc -n BirSiteForum
dotnet restore
dotnet build
dotnet run
dotnet publish -c Release
Bu ne kazandırır?
- Visual Studio şart değildir
- Linux’ta da geliştirme yapılabilir
- CI/CD süreçleri kolaylaşır
- Sunucu otomasyonu güçlenir
Özellikle VPS, Docker ve pipeline ortamlarında çok değerlidir.
4.10) Side-by-Side Çalışma Mantığı
Modern .NET tarafında farklı sürümlerin daha kontrollü şekilde yan yana yönetilmesi önemli avantajlardan biridir.
Bu şu senaryoda hayat kurtarır:
- Bir sunucuda eski proje .NET 6 kullanıyor
- Yeni proje .NET 8 kullanıyor
- Başka bir servis .NET 10 kullanıyor
Bunları daha yönetilebilir biçimde barındırabilmek modern yapının önemli artılarındandır. Destek yaşam döngüsü ve sürüm politikaları da Microsoft tarafından açık şekilde yayınlanır.
4.11) Cloud ve Container Dünyasına Uygunluk
.NET Core’un doğduğu ruh biraz da buydu:
- Docker
- Container
- Microservice
- Cloud deployment
- API-first yaklaşımı
Birsite.com için aşağıdaki yapıyı düşünelim:
- Forum API
- Kullanıcı doğrulama servisi
- Siber olay log servisi
- E-posta/bildirim servisi
- Raporlama servisi
5) .NET Framework ile .NET Core Arasındaki Farklar
Aşağıdaki tablo işi daha net gösterir: ()
| Başlık | .NET Framework | .NET Core / Modern .NET |
|---|---|---|
| Platform | Ağırlıklı Windows | Windows + Linux + macOS |
| Açık Kaynak | Sınırlı/eski yaklaşım | Evet, güçlü açık kaynak ekosistemi |
| Performans | Kurumsal ama daha klasik yapı | Modern yükler için daha optimize |
| Kurulum / CLI | Visual Studio ve klasik araçlara daha bağlı | CLI ile güçlü çapraz platform deneyimi |
| Dependency Injection | Varsayılan yerleşik yapı zayıf | Yerleşik destek güçlü |
| Middleware | Klasik HTTP pipeline yaklaşımı | Modern middleware pipeline |
| Container / Cloud | Daha sınırlı/ikincil | Doğal ve güçlü uyum |
| Yeni Projeler İçin Uygunluk | Genelde önerilmez | Genel önerilen yol budur |
| Eski Sistem Desteği | Çok güçlü | Taşıma gerekir |
Bu tabloyu tek cümlede özetlersek: ".NET Framework = mevcut eski yapıları yaşatmakta güçlü" , "Modern .NET = yeni proje geliştirmekte daha doğru yol"
Bu tercih çerçevesi Microsoft’un güncel "hangi .NET seçilmeli" rehberiyle uyumludur. bakınız: MSLearn
6) Eğitim sitelerinin yüzünden En Çok Karıştırılan Konu: .NET Core ile .NET 5/6/7/8/9/10 Aynı Şey mi?
Tam aynı isim değil, ama aynı modern hattın devamıdır.
Şöyle düşün:
- .NET Framework → eski ana kol
- .NET Core 1.x / 2.x / 3.x → yeni kolun ilk dönemi
- .NET 5 ve sonrası → bu yeni kolun "Core" adını bırakarak tek çatı altında devam etmesi
.NET Core öldü demek teknik olarak eksik cümledir.
Doğrusu:
.NET Core adı yerini modern birleşik ".NET" markasına bıraktı.
Bu yüzden bugün biri:
".NET Core öğreneyim mi?"
diye sorarsa verilecek pratik cevap şudur:
-"Temelleri öğren ama güncel hedefin modern .NET olsun."
7) ASP.NET ile ASP.NET Core Aynı mı?
Hayır. İsim benzer, yaklaşım farklıdır.
ASP.NET klasik tarafta:
- Web Forms
- MVC 5
- Web API (eski yapı)
ASP.NET Core ise modern tarafta:
- Cross-platform
- Middleware tabanlı
- DI dostu
- Cloud uyumlu
- Modern hosting ve deployment mantığına uygun
Microsoft ASP.NET Core’u; modern web uygulamaları ve API’leri için açık kaynaklı ve çok platformlu framework olarak tanımlıyor.
Özet olarak:
ASP.NET MVC 5 biliyor olmak değerlidir.
Ama yeni proje yazacaksan ASP.NET Core bilmek daha günceldir.
Siber Güvenlik Tarafında Modern .NET’in Avantajları
Bulunduğumuz forum kitlesi için bu taraf önemli. Modern .NET neden güvenlik açısından da dikkat çekiyor? (Her sektörün değerlendirmesi farklı senaryo ve ihtiyaçlarına göre değişiyor)
- Middleware ile güvenlik katmanları temiz inşa edilir
- Yapılandırma yönetimi daha düzenlidir
- Secret ve environment temelli yapı daha profesyoneldir
- Loglama ve gözlemlenebilirlik daha kuvvetlidir
- Güncel destek politikaları daha nettir
- Modern kimlik doğrulama akışlarına daha uygundur
Forum admin paneline gelen her istekte:
- JWT veya Cookie doğrulansın
- IP kaydedilsin
- brute-force denemeleri sayilsin
- şüpheli istekler ayrı loglansın
- kritik hareketler audit tablosuna yazılsın
Örnek bir güvenlik servisi:
C#:
public class ForumGuvenlikServisi
{
public bool SupheliIstekMi(string kullaniciAracisi)
{
if (string.IsNullOrWhiteSpace(kullaniciAracisi))
{
return true;
}
......
string kullaniciAracisiKucuk = kullaniciAracisi.ToLowerInvariant();
return kullaniciAracisiKucuk.Contains("sqlmap")
|| kullaniciAracisiKucuk.Contains("nmap")
|| kullaniciAracisiKucuk.Contains("curl");
}
.......
}
Son düzenleme:
