Mert Özen Her Satırda Daha İleri

Blog

Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.

Seriler
9 yazı bulundu
dotnet CLI Haritası: SDK ve Runtime Farkı, Komut Ailesi, global.json ve SDK Sürüm Seçimi
Backend SERİ 01

dotnet CLI Haritası: SDK ve Runtime Farkı, Komut Ailesi, global.json ve SDK Sürüm Seçimi

dotnet komutu hangi SDK'yı kullanacağını, çalıştırıldığı klasörden yukarı doğru bulduğu ilk global.json'a göre seçer; rollForward verilmezse yalnız aynı feature band içinde ilerler, uygulamanın hangi runtime'da çalışacağına ise runtimeconfig.json karar verir. Bookstore.slnx'e CLI ile proje ekliyor, rollForward politikalarını üç kurulu SDK ile karşılaştırıyor, 10.0.1xx ile 10.0.4xx band'lerinin farkını, workload'ları ve .NET 11 CLI değişikliklerini gerçek çıktılarla gösteriyoruz.

15 Kas 2026 15 dk 6
csproj'un Anatomisi: SDK-Style Proje, Sık Kullanılan Property'ler, Item'lar ve Implicit Davranışlar
Backend SERİ 02

csproj'un Anatomisi: SDK-Style Proje, Sık Kullanılan Property'ler, Item'lar ve Implicit Davranışlar

SDK-style bir csproj, Sdk attribute'unun eklediği import'lar, Directory.Build.props ve **/*.cs gibi varsayılan glob'lar sayesinde kısa kalır; property'nin gerçek değerini dotnet msbuild -getProperty, item'ları -getItem, dosyanın tamamını -preprocess gösterir. Bookstore'un proje dosyalarını okuyup template tekrarlarını temizliyor; console projede appsettings.json'un neden kopyalanmadığını, InvariantGlobalization, PrivateAssets ve InternalsVisibleTo'yu gerçek çıktılarla gösteriyoruz.

15 Kas 2026 11 dk 6
Çok Projeli Solution Düzeni: Directory.Build.props/targets, Central Package Management ve Ortak Ayarlar
Backend SERİ 03

Çok Projeli Solution Düzeni: Directory.Build.props/targets, Central Package Management ve Ortak Ayarlar

Directory.Build.props, Sdk.props'un içinden csproj'dan önce okunduğu için OutputType ya da IsPackable gibi değerleri göremez; projeye bağlı kararlar Directory.Build.targets'a gider, ama SDK'nın daha önce türettiği değerler orada da değişmez. Bookstore'da iç içe props zincirini, artifacts output'u, Central Package Management'ı, transitive pinning'i, VersionOverride'ı ve GlobalPackageReference ile eklenen analyzer'ı gerçek build çıktılarıyla kuruyoruz.

15 Kas 2026 12 dk 7
NuGet Restore'u Yönetmek: nuget.config, Package Source Mapping, Lock File'lar, Private Feed ve Minimum Publish Age
Backend SERİ 04

NuGet Restore'u Yönetmek: nuget.config, Package Source Mapping, Lock File'lar, Private Feed ve Minimum Publish Age

Birden fazla NuGet kaynağı tanımlıysa ve package source mapping yoksa, aynı adı taşıyan dış paket şirket içi paketin yerine seçilebilir; mapping her paketi yalnız izin verilen kaynaktan alır. Bookstore.Contracts'ı kimlik bilgisi ortam değişkeninden gelen bir private feed'e koyup nuget.config hiyerarşisini, lock file ve kilitli modu, .NET 11'in minimum publish age ayarını, NuGetAudit'in feed'e bağımlılığını ve CI'da restore cache'ini gerçek çıktılarla gösteriyoruz.

15 Kas 2026 12 dk 9
Multi-Targeting ve Conditional Build: TargetFrameworks, #if, Platform API'leri ve Sürümler Arası Kütüphane
Backend SERİ 05

Multi-Targeting ve Conditional Build: TargetFrameworks, #if, Platform API'leri ve Sürümler Arası Kütüphane

Bir library'yi birden fazla .NET sürümü için derlemek için TargetFrameworks yazılır, ama Directory.Build.props'ta tek bir TargetFramework varsa proje sessizce tek hedefle derlenir; onu projede boşaltmak gerekir. Bookstore.Contracts'ı net8.0 ve net10.0 için derleyip .NET 10'un NumericOrdering'ine .NET 8 yedeği yazıyor, testleri iki framework'te çalıştırıyor, netstandard2.0'ın bedelini, CA1416 platform kontrollerini ve .NET 8'de kalan bir tüketiciyi gerçek çıktılarla gösteriyoruz.

15 Kas 2026 10 dk 8
Publish Seçenekleri: Framework-Dependent, Self-Contained, Single-File, Trimming, ReadyToRun ve Native AOT
Backend SERİ 06

Publish Seçenekleri: Framework-Dependent, Self-Contained, Single-File, Trimming, ReadyToRun ve Native AOT

Framework-dependent publish en küçük çıktıyı verir ve runtime yamalarını makineden alır; self-contained, single-file, trimming ve Native AOT dağıtımı kolaylaştırır ama yamayı yeniden publish'e bağlar. bookstore-admin'i yedi modda publish edip boyut, başlangıç süresi ve belleği ölçüyor; trimming'in R2R'sız başlangıcı neden yavaşlattığını, trim uyarılarını build'e taşımayı, AOT'nin cross-OS sınırını ve publish profile'ını gerçek çıktılarla gösteriyoruz.

15 Kas 2026 11 dk 8
dotnet tool ve dotnet new Template'leri: Local Tool Manifest, dnx, Kendi Aracını ve Template'ini Paketlemek
Backend SERİ 07

dotnet tool ve dotnet new Template'leri: Local Tool Manifest, dnx, Kendi Aracını ve Template'ini Paketlemek

Bir .NET aracını repoya bağlamanın yolu local tool manifest'tir: sürüm dotnet-tools.json'da commit'lenir ve CI dotnet tool restore ile başlar. bookstore-admin'i PackAsTool ile paketleyip şirket feed'inden Reporting'e kuruyor, dnx'in source mapping'e takılmasını, SDK 11'in NETSDK1235 uyarısını, bookstore-module template paketini ve #:include kullanan bir file-based script'i gerçek çıktılarla gösteriyoruz.

15 Kas 2026 13 dk 7
MSBuild'i Anlamak: Property, Item, Target, Task, Custom Target ve Binlog ile Build Hatası Ayıklamak
Backend SERİ 08

MSBuild'i Anlamak: Property, Item, Target, Task, Custom Target ve Binlog ile Build Hatası Ayıklamak

MSBuild bir projeyi iki fazda işler: evaluation'da property ve item'ları okur, execution'da target'ları çalıştırır; target'larda oluşan değerler evaluation'da görünmez. Bookstore'a commit ve yerel değişiklik bilgisini assembly'ye yazan, Angular istemcisini Inputs/Outputs ile incremental olarak publish'e ekleyen target'lar yazıyor, binlog ile bir property'nin nerede değiştiğini gerçek çıktılarla buluyoruz.

15 Kas 2026 10 dk 9
.NET SDK'da .NET 6'dan 11'e Değişenler: Varsayılan Release Publish, Terminal Logger, .slnx, dnx, File-Based App'ler ve .NET 11 CLI
Backend SERİ 09

.NET SDK'da .NET 6'dan 11'e Değişenler: Varsayılan Release Publish, Terminal Logger, .slnx, dnx, File-Based App'ler ve .NET 11 CLI

SDK'yı yükseltirken kırılan şey genellikle kod değil, sürümü tekrar eden yerlerdir: global.json'un errorMessage'ı, container image etiketleri ve CI adımları. .NET 6'dan 11'e SDK değişikliklerini tabloya döküyor, eski bir projeyi okumak için kontrol listesi veriyor, Bookstore'u net10.0'da tutarak SDK 11'e taşıyor ve MSBuild server'ın CI'daki etkisini ölçümlerle gösteriyoruz.

15 Kas 2026 10 dk 6
Blog Haritası