.NET Upgrade Assistant ile Projelerinizi güncel sürüme getirin!

.NET Upgrade Assistant, .NET Framework tabanlı uygulamaları veya .NET Core uygulamalarını .NET 5 ve daha yeni sürümlere taşımayı kolaylaştıran bir komut satırı aracıdır.

Murat Dinç
Devops Türkiye☁️ 🐧 🐳 ☸️
5 min readJul 29, 2024

--

Selamlar,

Günümüzde .NET ekosistemi, güncelliğini ciddi seviyede korumayı gerektiren bir platform haline geldi. Her sürüm geçişinde, mevcut kod yapısında büyük değişiklikler yok gibi görünse de, altyapı üzerinde yapılan birçok değişiklik performans gibi kritik noktaları etkiliyor. Çalıştığım her şirkette mutlaka upgrade sıkıntısı yaşadık. Proje geride kalmış, fakat kimse güncellemeye cesaret edemiyordu. Bu durumun en büyük nedeni paket bağımlılıkları ve bu bağımlı olunan paketlerdeki değişimlerin projenin akışını ciddi şekilde etkilemesidir. Bu durumu neredeyse çalıştığım her şirkette yaşadım ve yaşadığım her tecrübe mutlaka sıkıntılı bir geçiş süreci oluşturdu.

Fakat Microsoft, benim gibi bu sıkıntıyı yaşayan geliştiricilerin sesini duymuş olacak ki .NET Upgrade Assistant aracını geliştirdi. Genel olarak eski .NET Framework projelerini modern .NET platformlarına taşımayı kolaylaştıran bir araç olarak tasarlandı fakat .NET Core sürümlerinin kendi aralarındaki geçiş sürecini de destekliyor.

Photo by Nik on Unsplash

.NET Core 3.1 ile .NET 5 arasındaki geçiş gerçekten sancılıydı. Birçok metod kullanımdan kalkmış ya da paketlerde versiyon bağımlılığında çok fazla değişiklik söz konusuydu. O zaman, bütün paketler üzerindeki bağımlılıkları ve metodları araştırıp yeni yapıya manuel olarak uygulamak zorunda kalmıştık.

💡 Bu araç, hayatımızı kurtarıp büyük projelerde birden geçiş yapmamızı sağlamayacak fakat proje upgrade tecrübesi olmayan arkadaşlar için faydalı bir araç olduğuna inanıyorum.

💡 Visual Studio kullanan kullanıcılar için bir UI kullanımı ile bu işlemleri sağlayabiliyorsunuz fakat ben makalemde bash script’ler üzerinden ilerleyeceğim.

.NET Upgrade Assistant Nedir?

.NET Upgrade Assistant, .NET Framework tabanlı uygulamaları veya .NET Core uygulamalarını .NET 5 ve daha yeni sürümlere taşımayı kolaylaştıran bir komut satırı aracıdır. Bu araç, projelerinizi analiz eder, gerekli değişiklikleri önerir ve bu değişiklikleri uygulamanıza yardımcı olur. Bu sayede, projelerinizi manuel olarak taşımak zorunda kalmadan, daha ileri versiyon avantajlarından faydalanabilirsiniz.

Avantajları

  1. Zaman ve Emek Tasarrufu: .NET Upgrade Assistant, projelerinizi analiz ederek gerekli değişiklikleri otomatik olarak önerir ve uygular. Bu, manuel geçiş işlemlerinde harcanan zamanı ve emeği büyük ölçüde azaltır.
  2. Hata Azaltma: Manuel geçiş işlemlerinde yapılan hatalar, projelerin çalışmasını engelleyebilir veya beklenmedik sorunlara yol açabilir. .NET Upgrade Assistant, bu hataları minimize ederek daha güvenli bir geçiş sağlar.
  3. Modern .NET Ekosisteminin Avantajları: Modern .NET sürümleri, performans, güvenlik ve yeni özellikler açısından birçok avantaj sunar. .NET Upgrade Assistant ile projelerinizi modernize ederek bu avantajlardan faydalanabilirsiniz.

Dezavantajları

  1. Kompleks Projelerde Zorluklar: Çok karmaşık ve büyük projelerde, .NET Upgrade Assistant her zaman mükemmel sonuçlar vermeyebilir. Manuel müdahale gerektiren durumlar ortaya çıkabilir.
  2. Öğrenme Eğrisi: Aracı etkili bir şekilde kullanabilmek için belirli bir öğrenme süreci gereklidir. Özellikle karmaşık projelerde, aracın sunduğu önerileri anlamak ve uygulamak için deneyim gerekebilir.

Temel Kullanım Örneği

.NET Upgrade Assistant kullanarak basit bir .NET Framework projesini .NET 8’e yükseltme adımlarını inceleyelim.

🔵 Adım 1: Aracın Yüklenmesi

Öncelikle, .NET Upgrade Assistant’ı yüklememiz gerekiyor. Bunu yapmak için, aşağıdaki komutu kullanabilirsiniz:

dotnet tool install -g upgrade-assistant

🔵 Adım 2: Projenin Analiz Edilmesi

Aracı çalıştırarak projenizi analiz edin:

upgrade-assistant analyze <project-path>

Bu komut, projenizi analiz eder ve geçiş sürecinde nelerin değişmesi gerektiği konusunda bilgi sağlar.

🔵 Adım 3: Projenin Yükseltilmesi

Analiz tamamlandıktan sonra, projenizi yükseltmeye başlayabilirsiniz:

upgrade-assistant upgrade <project-path>

Bu komut, projenizi adım adım yükseltecek ve gerekli değişiklikleri uygulayacaktır.

.NET Core 3.1’dan .NET 8’e Upgrade Senaryosu

Bu senaryoda, Entity Framework ve Newtonsoft.Json gibi popüler paketleri kullanan bir .NET Core 3.1 projesini .NET 8’e nasıl yükselteceğimizi adım adım inceleyeceğiz. Projenin .csproj dosyasını, kullanılan komutları ve bu komutların çıktısını detaylı bir şekilde ele alacağız.

🔵 Adım 1: Mevcut .NET Core 3.1 Projesi

Öncelikle, basit bir .NET Core 3.1 projesi oluşturalım ve içine Entity Framework Core ve Newtonsoft.Json paketlerini ekleyelim.

Proje Dosyası (csproj)

<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.0" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
</ItemGroup>

</Project>

Proje Kodu (Program.cs)

using System;
using Newtonsoft.Json;
using Microsoft.EntityFrameworkCore;

namespace UpgradeDemo
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");

var json = JsonConvert.SerializeObject(new { Message = "Hello, .NET Core 3.1!" });
Console.WriteLine(json);
}
}

public class AppDbContext : DbContext
{
public DbSet<Item> Items { get; set; }
}

public class Item
{
public int Id { get; set; }
public string Name { get; set; }
}
}

🔵 Adım 2: .NET Upgrade Assistant ile Projeyi Yükseltme

Öncelikle, .NET Upgrade Assistant’ı yükleyelim:

dotnet tool install -g upgrade-assistant

Projenin Analiz Edilmesi

NET Upgrade Assistant’ın projenizi analiz etmesi, geçiş sürecinin önemli bir adımıdır. Bu adımda, aracın mevcut projenizi inceleyerek, projeyi daha yeni bir .NET sürümüne yükseltmek için hangi değişikliklerin yapılması gerektiğini belirlemesi amaçlanır.

Bu aşamada, tool şu konulara odaklanır:

  • Hangi NuGet paketlerinin kullanıldığı.
  • Bu paketlerin sürümleri.
  • Yeni hedef framework ile uyumlu olup olmadıkları.

Kod Analizi

Kod analizi sırasında, .NET Upgrade Assistant projedeki kodu tarar ve yeni hedef framework ile uyumsuz olabilecek kısımları belirler. Bu, belirli API endpointleri, özellikler veya metodlar olabilir.

Örneğin, .NET Core 3.1’de kullanılan bazı API’ler, .NET 8’de farklı olabilir veya tamamen kaldırılmış olabilir.

Projemizi analiz etmek için aşağıdaki komutu kullanabiliriz:

upgrade-assistant analyze ./UpgradeDemo

Proje analiz komutunun çıktısı aşağıdaki gibi olacaktır.

Upgrade Assistant v1.0.0

Analyzing project path './UpgradeDemo'

- Verifying .NET SDK version...
- Reading project file(s)...
- Analyzing project dependencies...
- Inspecting NuGet packages...

Analysis complete. Project is compatible for upgrade.

Recommendations:
- Upgrade project to target .NET 8.0
- Update NuGet package references to compatible versions

Projenin Yükseltilmesi

Projemizi .NET 8’e yükseltmek için aşağıdaki komutu çalıştıralım:

upgrade-assistant upgrade ./UpgradeDemo

Yükseltme işlemi tamamlandığında, .csproj dosyamız ve proje kodumuz güncellenmiş olacaktır.

Upgrade Assistant v1.0.0

Upgrading project './UpgradeDemo'

Step 1 of 5: Analyzing project and dependencies...
- Verifying .NET SDK version...
- Reading project file(s)...
- Analyzing project dependencies...
- Inspecting NuGet packages...

Step 2 of 5: Updating project file...
- Changing target framework to net8.0...
- Updating NuGet package references...

Step 3 of 5: Applying code fixes...
- Updating using directives...
- Applying compatibility fixes...

Step 4 of 5: Building project...
- Restoring NuGet packages...
- Building project...

Step 5 of 5: Verifying upgrade...
- Running unit tests...

Upgrade complete. Project is now targeting .NET 8.0

Güncellenmiş Proje Dosyası (csproj)

<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup>

</Project>

Güncellenmiş Proje Kodu (Program.cs)

Proje kodumuzun büyük bir kısmı aynı kalacaktır. Ancak, Entity Framework ve Newtonsoft.Json paketlerinin yeni sürümlerini kullanacağımız için bazı uyarlamalar yapmamız gerekebilir. Bu senaryoda, kodda herhangi bir uyarlama gerekmemiştir.

using System;
using Newtonsoft.Json;
using Microsoft.EntityFrameworkCore;

namespace UpgradeDemo
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");

var json = JsonConvert.SerializeObject(new { Message = "Hello, .NET 8!" });
Console.WriteLine(json);
}
}

public class AppDbContext : DbContext
{
public DbSet<Item> Items { get; set; }
}

public class Item
{
public int Id { get; set; }
public string Name { get; set; }
}
}

.NET Core 3.1 projesini .NET 8’e yükseltmek, .NET Upgrade Assistant ile oldukça basit ve hızlı bir şekilde gerçekleştirilebilir. Bu araç, gerekli değişiklikleri otomatik olarak yaparak zaman ve emek tasarrufu sağlar.

Makalemin başlarında belirtmiş olduğum karmaşık projelerde etkili olmayabilir vurgusunu yapmıştım, fakat benim düşüncem şu ki, karmaşık projelerde sadece paketleri bile uyumlu hale getirmeyi başarmak başlı başına büyük bir yükü hafifletir. Bu nedenle, bu araç, sadece paketleri bile uyumlu hale getirebilmek için biçilmiş kaftandır diye düşünüyorum.

Makaleyi faydalı bulduysanız takip ederek destek olabilirsiniz 🙏

Bir sonraki yazıda görüşmek üzere 😊

--

--