ASP.NET Core 3.1'den 6.0'a geçiş

Bu makalede, mevcut bir ASP.NET Core 3.1 projesinin ASP.NET Core 6.0'a nasıl güncelleştirilecekleri açıklanmaktadır. ASP.NET Core 5.0'dan 6.0'a yükseltmek için bkz . ASP.NET Core 5.0'dan 6.0'a geçiş.

Önkoşullar

içinde .NET SDK sürümünü güncelleştirme global.json

Belirli bir .NET SDK sürümünü hedeflemek için bir global.json dosyaya güveniyorsanız, özelliğini yüklü .NET 6.0 SDK sürümüne güncelleştirin version . Örneğin:

{
  "sdk": {
-    "version": "3.1.200"
+    "version": "6.0.100"
  }
}

Hedef çerçeveyi güncelleştirme

Proje dosyasının Target Framework Takma Adını (TFM) olarak net6.0güncelleştirin:

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

  <PropertyGroup>
-    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>

</Project>

Paket başvurularını güncelleştirme

Proje dosyasında, her Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.*ve System.Net.Http.Json paket başvurusunun Version özniteliğini 6.0.0 veya üzeri olarak güncelleştirin. Örneğin:

<ItemGroup>
-    <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="3.1.6" />
-    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.6" />
-    <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="3.1.6" />
-    <PackageReference Include="System.Net.Http.Json" Version="3.2.1" />
+    <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="6.0.0" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="6.0.0" />
+    <PackageReference Include="System.Net.Http.Json" Version="6.0.0" />
</ItemGroup>

Silme bin ve obj klasörler

ve obj klasörlerini bin silmeniz gerekebilir. NuGet paket önbelleğini temizlemek için komutunu çalıştırın dotnet nuget locals --clear all .

Minimum barındırma modeli

ASP.NET Core şablonları, yeni minimal barındırma modelini kullanarak kod oluşturur. Minimum barındırma modeli tek Program.cs bir dosyada birleştirilirStartup.cs.Program.cs ConfigureServices ve Configure artık kullanılmaz. ASP.NET Core 3.1'den 6.0'a geçiş yapan uygulamaların en düşük barındırma modelini Startup kullanması gerekmez ve ASP.NET Core 3.1 şablonları tarafından kullanılan Genel Ana Bilgisayar tam olarak desteklenir.

Yeni minimal barındırma modeliyle kullanmak Startup için bkz . Başlangıç'ı yeni minimal barındırma modeliyle kullanma.

ASP.NET Core 6.0 şablonları tarafından kullanılan aşağıdaki deseni kullanarak yeni minimal barındırma modeline geçiş yapmak için bkz. ASP.NET Core 6.0'da yeni minimal barındırma modeline geçirilen kod örnekleri ve ASP.NET Core 5.0'dan 6.0'a geçiş

Sınıf kitaplıklarını (RCL' ler) güncelleştirme Razor

ASP.NET Core 6.0'ın bir parçası olarak sunulan yeni API'lerden veya özelliklerden yararlanmak için sınıf kitaplıklarını (RCL' ler) geçirin Razor .

Bileşenleri hedefleyen bir RCL'yi güncelleştirmek için:

  1. Proje dosyasında aşağıdaki özellikleri güncelleştirin:

    <Project Sdk="Microsoft.NET.Sdk.Razor">
      <PropertyGroup>
    -     <TargetFramework>netstandard2.0</TargetFramework>
    -     <RazorLangVersion>3.0</RazorLangVersion>
    +     <TargetFramework>net6.0</TargetFramework>
      </PropertyGroup>
    
  2. Diğer paketleri en son sürümlerine güncelleştirin. En son sürümler NuGet.org bulunabilir.

MVC'yi hedefleyen bir RCL'yi güncelleştirmek için proje dosyasındaki aşağıdaki özellikleri güncelleştirin:

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

  <PropertyGroup>
-    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <TargetFramework>net6.0</TargetFramework>
    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>
  </PropertyGroup>

Blazor

Uygulamalar için tüm 5.0 özelliklerini ve 6.0 özelliklerini benimsemek için Blazor aşağıdaki işlemi öneririz:

  • Proje şablonlarından birinden Blazor yeni bir 6.0 Blazor projesi oluşturun. Daha fazla bilgi için bkz . ASP.NET Core Blazoriçin Araçlar.
  • Yeni 5.0 ve 6.0 özelliklerini benimsemek için değişiklik yaparak uygulamanın bileşenlerini ve kodunu 6.0 uygulamasına taşıyın.

Docker görüntülerini güncelleştirme

Docker kullanan uygulamalar için DockerfileFROM deyimlerinizi ve betiklerinizi güncelleştirin. ASP.NET Core 6.0 çalışma zamanını içeren bir temel görüntü kullanın. ASP.NET Core 3.1 ile 6.0 arasındaki aşağıdaki docker pull komut farkını göz önünde bulundurun:

- docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1
+ docker pull mcr.microsoft.com/dotnet/aspnet:6.0

Ürün adı olarak ".NET"e taşıma işleminin bir parçası olarak Docker görüntüleri depolardan mcr.microsoft.com/dotnet/core öğesine mcr.microsoft.com/dotnettaşındı. Daha fazla bilgi için bkz . .NET 5.0 - Docker Depo Adı Değişikliği (dotnet/dotnet-docker #1939).

ASP.NET Core MVC ve Razor Sayfalarda model bağlama değişiklikleri

DateTime değerler modele UTC saatleri olarak bağlıdır

ASP.NET Core 3.1 ve önceki sürümlerinde değerler, DateTime saat diliminin sunucu tarafından belirlendiği yerel saat olarak modele bağlıydı. DateTime giriş biçimlendirmesinden (JSON) ve DateTimeOffset değerlere bağlı değerler UTC saat dilimleri olarak bağlanıyordu.

ASP.NET Core 5.0 ve sonraki sürümlerinde model bağlama, değerleri UTC saat dilimiyle tutarlı bir şekilde bağlar DateTime .

Önceki davranışı korumak için içindeki Startup.ConfigureServicesöğesini DateTimeModelBinderProvider kaldırın:

services.AddControllersWithViews(options =>
    options.ModelBinderProviders.RemoveType<DateTimeModelBinderProvider>());

ComplexObjectModelBinderProvider \ ComplexObjectModelBinder Değiştirmek ComplexTypeModelBinderProvider \ ComplexTypeModelBinder

Model bağlama C# 9 kayıt türleri için destek eklemek için şu şekildedir ComplexTypeModelBinderProvider :

  • Modası geçmiş olarak notlar.
  • Artık varsayılan olarak kaydedilmedi.

öğesinin koleksiyondaki ModelBinderProviders varlığını ComplexTypeModelBinderProvider kullanan uygulamaların yeni bağlayıcı sağlayıcısına başvurması gerekir:

- var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexTypeModelBinderProvider>();
+ var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexObjectModelBinderProvider>();

UseDatabaseErrorPage Eski

Tek tek kullanıcı hesapları için bir seçenek içeren ASP.NET Core 3.1 şablonları için UseDatabaseErrorPagebir çağrı oluşturur. UseDatabaseErrorPageartık kullanım dışıdır ve aşağıdaki kodda gösterildiği gibi ve UseMigrationsEndPointbirleşimiyle AddDatabaseDeveloperPageExceptionFilter değiştirilmelidir:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
+   services.AddDatabaseDeveloperPageExceptionFilter();
    services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
        .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddRazorPages();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
+       app.UseMigrationsEndPoint();
-       app.UseDatabaseErrorPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

Daha fazla bilgi için bkz . Eski DatabaseErrorPage ara yazılımı (dotnet/aspnetcore #24987).

ASP.NET Çekirdek Modülü (ANCM)

Visual Studio yüklenirken ASP.NET Çekirdek Modülü (ANCM) seçili bir bileşen değilse veya sistemde ANCM'nin önceki bir sürümü yüklüyse, en son .NET Core Barındırma Paketi Yükleyicisi'ni (doğrudan indirme) indirin ve yükleyiciyi çalıştırın. Daha fazla bilgi için bkz . Barındırma Paketi.

Uygulama adı değişikliği

.NET 6'da içerik WebApplicationBuilder kök yolunu ile DirectorySeparatorCharbitmesi için normalleştirir. Veya WebHostBuilder uygulamasından HostBuilder geçiş yapılan uygulamaların çoğu normalleştirilemediği için aynı uygulama adına sahip olmaz. Daha fazla bilgi için bkz . SetApplicationName

Hataya neden olan değişiklikleri gözden geçirme

Aşağıdaki kaynaklara bakın: