Aracılığıyla paylaş


.NET 6 .NET 7'de ASP.NET Core'dan geçiş

Bu makalede, .NET 6 projesinde var olan bir ASP.NET Core'un .NET 7'ye nasıl güncelleştirilecekleri açıklanmaktadır.

Önkoşullar

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

Belirli bir .NET Core SDK sürümünü hedeflemek için bir global.json dosya kullanıyorsanız, version özelliğini yüklü olan .NET 7 SDK sürümüne güncelleştirin. Örneğin:

{
  "sdk": {
-    "version": "6.0.200"
+    "version": "7.0.100"
  }
}

Hedef çerçeveyi güncelleştirme

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

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

  <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>net7.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 7.0.0 veya üzeri sürümlere güncelleştirin. Örneğin:

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

Blazor

.NET 7 özelliklerini benimseme

Bu makalenin önceki bölümlerinde bir uygulamayı .NET 7'ye güncelleştirme yönergelerini takip ettikten sonra, .NET 7'de ASP.NET Core'daki yenilikler başlığındaki bağlantıları izleyerek belirli özellikleri benimseyin.

UygulamalarBlazoryeni 7.0 özelliklerini benimsemek için aşağıdaki işlemi öneririz:

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

Bileşen parametresi bağlamayı basitleştirme

Önceki Blazor sürümlerde, birden çok bileşen arasında bağlama, erişimcilerle get/set özelliklere bağlama gerektiriyor.

.NET 6 veya önceki sürümlerinde:

<NestedGrandchild @bind-GrandchildMessage="BoundValue" />

@code {
    ...

    private string BoundValue
    {
        get => ChildMessage ?? string.Empty;
        set => ChildMessageChanged.InvokeAsync(value);
    }
}

.NET 7'de, iki yönlü veri bağlamayı desteklemek ve bağlama söz dizimini basitleştirmek için yeni @bind:get ve @bind:set değiştiricileri kullanabilirsiniz:

<NestedGrandchild @bind-GrandchildMessage:get="ChildMessage" 
    @bind-GrandchildMessage:set="ChildMessageChanged" />

Daha fazla bilgi için Veri bağlama makalesindeki aşağıdaki içeriğe bakın:

Özetlenmemiş JavaScript birlikte çalışma geçişi

Arabirimi kullanan IJSUnmarshalledRuntime özetlenmemiş birlikte çalışma kullanım dışıdır ve JavaScript [JSImport]/[JSExport] birlikte çalışmasıyla değiştirilmelidir.

Daha fazla bilgi için bkz . JavaScript JSImport/JSExport ASP.NET Core Blazorile birlikte çalışma.

Blazor WebAssembly kimlik doğrulaması, yeniden yönlendirmeler için geçmiş durumunu kullanır

Uygulamalarda kimlik doğrulaması desteği, URL'deki Blazor WebAssembly sorgu dizeleri yerine gezinti geçmişi durumuna bağlı olacak şekilde değiştirildi. Sonuç olarak, .NET 7'de başarılı bir oturum açma işleminden sonra dönüş URL'sinin sorgu dizesi üzerinden geçirilmesi özgün sayfaya geri yönlendirilemiyor.

Aşağıdaki örnek, ile yeniden yönlendirme URL'sini (RedirectToLogin.razor) temel alan ve içinde ?returnUrl=.NET 6 veya öncekiNavigateTo:

@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@code {
    protected override void OnInitialized()
    {
        Navigation.NavigateTo(
            $"authentication/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}");
    }
}

Aşağıdaki örnek, ile gezinti geçmişi durumunu RedirectToLogin.razoriçinde .NET 7 veya üstünü:

@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@using Microsoft.Extensions.Options

@inject IOptionsSnapshot<RemoteAuthenticationOptions<ApiAuthorizationProviderOptions>> OptionsSnapshot
@code {
    protected override void OnInitialized()
    {
        Navigation.NavigateToLogin(OptionsSnapshot.Get(Options.DefaultName).AuthenticationPaths.LogInPath);
    }
}

Bu değişikliğin bir parçası olarak , SignOutSessionStateManager .NET 7 veya sonraki sürümlerinde kullanımdan kaldırılmış ve ile NavigateToLogoutdeğiştirilmiştir.

Aşağıdaki örnek, proje şablonundan oluşturulan bir uygulamanın önceki yaklaşımını

@inject SignOutSessionStateManager SignOutManager

...

@code{
    private async Task BeginLogout(MouseEventArgs args)
    {
        await SignOutManager.SetSignOutState();
        Navigation.NavigateTo("authentication/logout");
    }
}

Aşağıdaki örnekte çağrısında Shared/LoginDisplay.razor yeni yaklaşımNavigateToLogout. öğesinin eklemesi @inject (SignOutSessionStateManager) dosyanın en üstündeki bileşenin yönergelerinden kaldırılır ve BeginLogOut yöntemi aşağıdaki koda güncelleştirilir:

@code{
    public void BeginLogOut()
    {
        Navigation.NavigateToLogout("authentication/logout");
    }
}

Hizmet SignOutSessionStateManager kaydı içinde Program.cskaldırılır:

- builder.Services.AddScoped<SignOutSessionStateManager>();

Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:

.NET 6 projeleri için .NET WebAssembly derleme araçları

Artık .NET 7 SDK ile çalışırken .NET WebAssembly derleme araçlarını bir .NET 6 projesiyle kullanabilirsiniz. Yeni wasm-tools-net6 iş yükü, .NET 7 SDK ile kullanılabilmesi için .NET 6 projeleri için .NET WebAssembly derleme araçlarını içerir. Mevcut wasm-tools iş yükü ,NET 7 projeleri için .NET WebAssembly derleme araçlarını yükler. Ancak, .NET WebAssembly derleme araçlarının .NET 7 sürümü .NET 6 ile oluşturulan mevcut projelerle uyumsuz. .NET 6 ve .NET 7'yi desteklemesi gereken .NET WebAssembly derleme araçlarını kullanan projelerin çoklu hedefleme kullanması gerekir.

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

Docker kullanan uygulamalar için Dockerfile. .NET 7 çalışma zamanında ASP.NET Core içeren bir temel görüntü kullanın. .NET 6'da ASP.NET Core ile .NET 7 arasındaki aşağıdaki docker pull komut farkını göz önünde bulundurun:

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

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

.NET 6'dan .NET 7'ye geçerken uyum sorunlarına yol açabilecek değişiklikler için bkz. .NET 7'deki köklü değişiklikler. ASP.NET Core ve Entity Framework Core listeye eklenir.