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

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

Ö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 dosyaya güveniyorsanız, özelliğini yüklü .NET 5.0 SDK sürümüne güncelleştirin version . Örneğin:

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

Hedef çerçeveyi güncelleştirme

Bir Blazor WebAssembly projeyi güncelleştiriyorsanız Projeleri güncelleştir Blazor WebAssembly bölümüne atlayın. Diğer ASP.NET Core proje türleri için proje dosyasının Target Framework Moniker'ini (TFM) olarak net5.0güncelleştirin:

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

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

</Project>

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 .

Blazor 5.0.1 ve daha sonraki 5.x sürümlerinde uygulama yönlendirme mantığındaki değişiklikler 6.0'a kadar yayınlar

ASP.NET Core 5.0.1 yama sürümünde yol önceliği hesaplaması değişti. İsteğe bağlı parametrelerle tümünü yakala yolları veya yolları tanımladıysanız bu durum sizi etkileyebilir.

Eski davranış

ASP.NET Core 5.0.0 veya önceki sürümlerinde önceki davranışlarla, gibi {*slug}daha düşük önceliğe sahip yollar, gibi /customer/{id}daha yüksek önceliğe sahip yollardan önce eşleştirilir.

Yeni davranış

ASP.NET Core 5.0.1 veya sonraki sürümlerindeki yeni davranış, ASP.NET Core uygulamalarında tanımlanan yönlendirme davranışıyla yakından eşleşir; burada çerçeve her segment için önce yol önceliğini hesaplar ve oluşturur ve yalnızca ikincil ölçüt olarak bağlantıları kesmek için yolun uzunluğunu kullanır.

Değişiklik nedeni

Yönlendirme sisteminin yönlendirme tarafından Blazor desteklenen özelliklerin alt kümesi için Blazor ASP.NET Core yönlendirme sistemiyle aynı şekilde davranması hedeflendiğinden, özgün davranış uygulamada bir hata olarak kabul edilir.

PreferExactMatches Doğru davranışı kabul etmek için Router özniteliğini dosyadaki App.razor bileşene ekleyin:

<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">

PreferExactMatches olarak ayarlandığında@true, yol eşleştirme joker karakterler yerine tam eşleşmeleri tercih eder.

Önemli

Tüm uygulamalar açıkça olarak @trueolarak ayarlanmalıdırPreferExactMatches.

olarak ayarlanabilir PreferExactMatches @false veya ayarsız bırakılamaz, yalnızca geriye dönük uyumluluk için sağlanır.

.NET 6 yayınlandığında yönlendirici her zaman tam eşleşmeleri tercih eder ve PreferExactMatches seçenek kullanılamaz.

Güncelleştirme Blazor WebAssembly ve Blazor Server projeler

Bu bölümdeki yönergeler her iki barındırma modeli için de Blazor geçerlidir. Bu bölümü izleyen bölümler, modelleri ve uygulama türlerini barındırmaya özgü ek yönergeler sağlar. İlgili tüm bölümlerdeki kılavuzu uygulamanıza uygulayın.

  1. Bir wwwroot/index.html Blazor WebAssembly uygulamanın veya Pages/_Host.cshtml uygulamanın Blazor Server içindeki öğesine stiller için bir <link> öğe <head> ekleyin. Aşağıdaki <link> öğe href öznitelik değerlerinde yer tutucu {ASSEMBLY NAME} , uygulamanın derleme adıdır.

    +<link href="{ASSEMBLY NAME}.styles.css" rel="stylesheet" />
    

    Tek başına Blazor WebAssembly veya Blazor Server örnek:

    +<link href="BlazorSample.styles.css" rel="stylesheet" />
    

    Client barındırılan Blazor WebAssembly çözüm örneği projesi:

    +<link href="BlazorSample.Client.styles.css" rel="stylesheet" />
    
  2. Bileşen sanallaştırması için uygulamanın _Imports.razor dosyasına yeni bir ad alanı ekleyin. Microsoft.AspNetCore.Components.Web.Virtualization Aşağıdaki _Imports.razor dosyalar, proje şablonlarından Blazor oluşturulan uygulamalarda varsayılan ad alanlarını gösterir. Yer tutucu {ASSEMBLY NAME} , uygulamanın derleme adıdır.

    Blazor WebAssembly (_Imports.razor):

    @using System.Net.Http
    @using System.Net.Http.Json
    @using Microsoft.AspNetCore.Components.Forms
    @using Microsoft.AspNetCore.Components.Routing
    @using Microsoft.AspNetCore.Components.Web
    @using Microsoft.AspNetCore.Components.Web.Virtualization
    @using Microsoft.AspNetCore.Components.WebAssembly.Http
    @using Microsoft.JSInterop
    @using {ASSEMBLY NAME}
    @using {ASSEMBLY NAME}.Shared
    

    Blazor Server (_Imports.razor):

    @using System.Net.Http
    @using Microsoft.AspNetCore.Authorization
    @using Microsoft.AspNetCore.Components.Authorization
    @using Microsoft.AspNetCore.Components.Forms
    @using Microsoft.AspNetCore.Components.Routing
    @using Microsoft.AspNetCore.Components.Web
    @using Microsoft.AspNetCore.Components.Web.Virtualization
    @using Microsoft.JSInterop
    @using {ASSEMBLY NAME}
    @using {ASSEMBLY NAME}.Shared
    
  3. () bileşenindeMainLayoutShared/MainLayout.razor, bileşenin HTML işaretlemesini özniteliği olarak ayarlanmış pagebir class öğeyle <div> çevreleyin:

    <div class="page">
    
        ...
    
    </div>
    
  4. Klasöre aşağıdaki dosyaları Shared ekleyin:

    MainLayout.razor.css:

    .page {
        position: relative;
        display: flex;
        flex-direction: column;
    }
    
    .main {
        flex: 1;
    }
    
    .sidebar {
        background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);
    }
    
    .top-row {
        background-color: #f7f7f7;
        border-bottom: 1px solid #d6d5d5;
        justify-content: flex-end;
        height: 3.5rem;
        display: flex;
        align-items: center;
    }
    
        .top-row ::deep a, .top-row .btn-link {
            white-space: nowrap;
            margin-left: 1.5rem;
        }
    
        .top-row a:first-child {
            overflow: hidden;
            text-overflow: ellipsis;
        }
    
    @media (max-width: 767.98px) {
        .top-row:not(.auth) {
            display: none;
        }
    
        .top-row.auth {
            justify-content: space-between;
        }
    
        .top-row a, .top-row .btn-link {
            margin-left: 0;
        }
    }
    
    @media (min-width: 768px) {
        .page {
            flex-direction: row;
        }
    
        .sidebar {
            width: 250px;
            height: 100vh;
            position: sticky;
            top: 0;
        }
    
        .top-row {
            position: sticky;
            top: 0;
            z-index: 1;
        }
    
        .main > div {
            padding-left: 2rem !important;
            padding-right: 1.5rem !important;
        }
    }
    

    NavMenu.razor.css:

    .navbar-toggler {
        background-color: rgba(255, 255, 255, 0.1);
    }
    
    .top-row {
        height: 3.5rem;
        background-color: rgba(0,0,0,0.4);
    }
    
    .navbar-brand {
        font-size: 1.1rem;
    }
    
    .oi {
        width: 2rem;
        font-size: 1.1rem;
        vertical-align: text-top;
        top: -2px;
    }
    
    .nav-item {
        font-size: 0.9rem;
        padding-bottom: 0.5rem;
    }
    
        .nav-item:first-of-type {
            padding-top: 1rem;
        }
    
        .nav-item:last-of-type {
            padding-bottom: 1rem;
        }
    
        .nav-item ::deep a {
            color: #d7d7d7;
            border-radius: 4px;
            height: 3rem;
            display: flex;
            align-items: center;
            line-height: 3rem;
        }
    
    .nav-item ::deep a.active {
        background-color: rgba(255,255,255,0.25);
        color: white;
    }
    
    .nav-item ::deep a:hover {
        background-color: rgba(255,255,255,0.1);
        color: white;
    }
    
    @media (min-width: 768px) {
        .navbar-toggler {
            display: none;
        }
    
        .collapse {
            /* Never collapse the sidebar for wide screens */
            display: block;
        }
    }
    
  5. Bir uygulamanın en son temel wwwroot/css/app.css dosyası Blazor WebAssembly veya wwwroot/css/site.css bir Blazor Server uygulamanın dosyası aşağıdaki stilleri içerir. Aşağıdaki stilleri ve uygulamaya eklediğiniz stilleri bırakarak ek stilleri kaldırın.

    Aşağıdaki stil sayfası yalnızca temel stilleri içerir ve geliştirici tarafından eklenen özel stilleri içermez :

    html, body {
        font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
    }
    
    a, .btn-link {
        color: #0366d6;
    }
    
    .btn-primary {
        color: #fff;
        background-color: #1b6ec2;
        border-color: #1861ac;
    }
    
    .content {
        padding-top: 1.1rem;
    }
    
    .valid.modified:not([type=checkbox]) {
        outline: 1px solid #26b050;
    }
    
    .invalid {
        outline: 1px solid red;
    }
    
    .validation-message {
        color: red;
    }
    
    #blazor-error-ui {
        background: lightyellow;
        bottom: 0;
        box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
        display: none;
        left: 0;
        padding: 0.6rem 1.25rem 0.7rem 1.25rem;
        position: fixed;
        width: 100%;
        z-index: 1000;
    }
    
    #blazor-error-ui .dismiss {
        cursor: pointer;
        position: absolute;
        right: 0.75rem;
        top: 0.5rem;
    }
    

    Not

    Yukarıdaki örnekte proje şablonu tarafından sağlanan Open Iconic simgeleri ()open-iconic-bootstrap.css yönergesi Blazor gösterilmez@import. Open Iconic , bakımcıları tarafından terk edildi.

Projeleri güncelleştirme Blazor WebAssembly

Önceki Güncelleştirme Blazor WebAssembly ve Blazor Server projeler bölümündeki yönergeleri izleyin.

Barındırılan Blazor çözümün Client projesi de dahil olmak üzere bir Blazor WebAssembly proje için proje dosyasına aşağıdaki değişiklikleri uygulayın:

  1. SDK'yi olarak Microsoft.NET.Sdk.Web Microsoft.NET.Sdk.BlazorWebAssemblygüncelleştirin:

    - <Project Sdk="Microsoft.NET.Sdk.Web">
    + <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
    

    Not

    Bu güncelleştirme yalnızca tek başına Blazor WebAssembly projeler ve barındırılan Blazor çözümlerin Client projeleri için geçerlidir.

  2. Aşağıdaki özellikleri güncelleştirin:

    <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
    
      <PropertyGroup>
    -     <TargetFramework>netstandard2.1</TargetFramework>
    -     <RazorLangVersion>3.0</RazorLangVersion>
    +     <TargetFramework>net5.0</TargetFramework>
      </PropertyGroup>
    
  3. Microsoft.AspNetCore.Components.WebAssembly.Build için paket başvurularını kaldırın:

    <ItemGroup>
    -    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Build" Version="3.2.1" PrivateAssets="all" />
    
  4. Diğer paketleri en son sürümlerine güncelleştirin. En son sürümler NuGet.org bulunabilir.

  5. içindewwwroot/index.html, bileşeni olarak ayarlanmış bir <div> öğeye yükleyen App öğeyi id appdeğiştirin:

    -<app>Loading...</app>
    +<div id="app">Loading...</div>
    
  6. içinde Program.Main (Program.cs içinde, öğesine bir karma # ekleyerek css seçicisine başvuruyu <app> değiştirin:

    -builder.RootComponents.Add<App>("app");
    +builder.RootComponents.Add<App>("#app");
    
  7. (Program.cs) içinde Program.Main , varsa varsayılan geçici HttpClient kaydı kapsamlı olarak değiştirin:

    -builder.Services.AddTransient(sp => new HttpClient 
    -    { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
    +builder.Services.AddScoped(sp => new HttpClient 
    +    { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
    
  8. Barındırılan Program.Main Client Blazor çözümler uygulamasının (Program.cs) içinde:

    • İsteğe bağlı olarak, dize istemci temel adresleri yerine kullanın builder.HostEnvironment.BaseAddress .
    • Adlandırılmış geçici istemci fabrikası kayıtlarını kapsamlı olarak değiştirin.
    -builder.Services.AddHttpClient("{APP NAMESPACE}.ServerAPI", 
    -    client => client.BaseAddress = new Uri("https://localhost:5001"))
    -    .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();
    -builder.Services.AddTransient(sp => sp.GetRequiredService<IHttpClientFactory>()
    -    .CreateClient("{APP NAMESPACE}.ServerAPI"));
    +builder.Services.AddHttpClient("{APP NAMESPACE}.ServerAPI", 
    +    client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress))
    +    .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();
    +builder.Services.AddScoped(sp => sp.GetRequiredService<IHttpClientFactory>()
    +    .CreateClient("{APP NAMESPACE}.ServerAPI"));
    

    Önceki kodda {APP NAMESPACE} yer tutucu, uygulamanın ad alanıdır.

Microsoft Hesapları ile tek başına Blazor WebAssembly uygulama

Önceki Güncelleştirme ve projeler ile Blazor Server Projeleri güncelleştir Blazor WebAssembly Blazor WebAssembly bölümlerindeki yönergeleri izleyin.

Microsoft Hesapları için Microsoft Entra Id (ME-ID) kullanmak üzere Azure portalında kayıtlı tek başına Blazor WebAssembly bir uygulama için:

  • Uygulama için ve offline_access kapsamları gerekiropenid:

    options.ProviderOptions.DefaultAccessTokenScopes.Add("openid");
    options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
    
  • Azure portalı uygulama kaydı Kimlik doğrulaması dikey penceresinde:

    1. Web platformu yapılandırmasını kaldırın.
    2. Uygulamanın yeniden yönlendirme URI'siyle tek sayfalı bir uygulama platformu yapılandırması ekleyin.
    3. Erişim belirteçleri ve kimlik belirteçleri için örtük izni devre dışı bırakın.

Daha fazla bilgi için bkz . Microsoft Hesapları ile ASP.NET Core Blazor WebAssembly tek başına uygulamasının güvenliğini sağlama.

Microsoft Entra ID (ME-ID) ile tek başına Blazor WebAssembly uygulama

Önceki Güncelleştirme ve projeler ile Blazor Server Projeleri güncelleştir Blazor WebAssembly Blazor WebAssembly bölümlerindeki yönergeleri izleyin.

Microsoft Entra Id (ME-ID) kullanmak üzere Azure portalında kayıtlı tek başına Blazor WebAssembly bir uygulama için:

  • Uygulama için kapsam gerekir https://graph.microsoft.com/User.Read :

    options.ProviderOptions.DefaultAccessTokenScopes
        .Add("https://graph.microsoft.com/User.Read");
    
  • Azure portalı uygulama kaydı Kimlik doğrulaması dikey penceresinde:

    1. Web platformu yapılandırmasını kaldırın.
    2. Uygulamanın yeniden yönlendirme URI'siyle tek sayfalı bir uygulama platformu yapılandırması ekleyin.
    3. Erişim belirteçleri ve kimlik belirteçleri için örtük izni devre dışı bırakın.

Daha fazla bilgi için bkz. Microsoft Entra ID ile ASP.NET Core Blazor WebAssembly tek başına uygulamasının güvenliğini sağlama.

Azure Active Directory (AAD) B2C ile tek başına Blazor WebAssembly uygulama

Önceki Güncelleştirme ve projeler ile Blazor Server Projeleri güncelleştir Blazor WebAssembly Blazor WebAssembly bölümlerindeki yönergeleri izleyin.

Azure portalında kayıtlı tek başına Blazor WebAssembly bir uygulamanın Azure Active Directory (AAD) B2C'yi kullanması için:

  • Uygulama için ve offline_access kapsamları gerekiropenid:

    options.ProviderOptions.DefaultAccessTokenScopes.Add("openid");
    options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
    
  • Azure portalı uygulama kaydı Kimlik doğrulaması dikey penceresinde:

    1. Web platformu yapılandırmasını kaldırın.
    2. Uygulamanın yeniden yönlendirme URI'siyle tek sayfalı bir uygulama platformu yapılandırması ekleyin.
    3. Erişim belirteçleri ve kimlik belirteçleri için örtük izni devre dışı bırakın.

Daha fazla bilgi için bkz. Azure Active Directory B2C ile ASP.NET Core Blazor WebAssembly tek başına uygulamasının güvenliğini sağlama.

Microsoft Entra Id (ME-ID) veya AAD B2C ile barındırılan Blazor WebAssembly uygulama

Önceki Güncelleştirme ve projeler ile Blazor Server Projeleri güncelleştir Blazor WebAssembly Blazor WebAssembly bölümlerindeki yönergeleri izleyin.

Client Kullanıcı kimlik doğrulaması için AAD veya AAD B2C kullanan barındırılan Blazor bir çözümün uygulama kaydı, platform yapılandırması Azure Uygulaması tek sayfalı bir uygulama kullanmalıdır.

Azure portalı Client uygulama kaydı Kimlik doğrulaması dikey penceresinde:

  1. Web platformu yapılandırmasını kaldırın.
  2. Uygulamanın yeniden yönlendirme URI'siyle tek sayfalı bir uygulama platformu yapılandırması ekleyin.
  3. Erişim belirteçleri ve kimlik belirteçleri için örtük izni devre dışı bırakın.

Daha fazla bilgi için bkz.

Barındırılan Blazor çözümün Sunucu projesini güncelleştirme

Önceki bölümlerde yer alan yönergeleri izleyin:

Bu makaledeki Server genel yönergeleri izleyerek barındırılan Blazor çözümün projesini ASP.NET Core uygulaması olarak güncelleştirin.

Ayrıca, Server Microsoft Entra ID (ME-ID) veya B2C ile istemci Blazor WebAssembly uygulamalarında kullanıcıların kimliğini doğrulayan projelerin yeni Microsoft Identity v2.0 paketlerini benimsemesi gerekir:

AAD için:

-<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="..." />
+<PackageReference Include="Microsoft.Identity.Web" Version="{VERSION}" />
+<PackageReference Include="Microsoft.Identity.Web.UI" Version="{VERSION}" />

AAD B2C için:

-<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureADB2C.UI" Version="..." />
+<PackageReference Include="Microsoft.Identity.Web" Version="{VERSION}" />
+<PackageReference Include="Microsoft.Identity.Web.UI" Version="{VERSION}" />

Önceki paket başvuruları için, NuGet.org konumunda yer {VERSION} tutucuların paket sürümlerini belirleyin:

Not

Barındırılan Blazor WebAssembly çözümdeki Server projenin SDK'sı Microsoft.NET.Sdk.Webkalır:

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

Daha fazla bilgi için bkz.

Çözümü temizleme ve yeniden oluşturma

Uygulamayı veya çözümü .NET 5'e geçirdikten sonra, uygulamayı veya çözümü temizleyin ve yeniden oluşturun. Yeni paket başvuruları ile önbelleğe alınmış paketler arasında paket uyumsuzlukları varsa:

  1. Komut kabuğunda aşağıdaki dotnet nuget locals komutu yürüterek NuGet paket önbelleklerini temizleyin:

    dotnet nuget locals --clear all
    
  2. Uygulamayı veya çözümü temizleyin ve yeniden oluşturun.

Sorun giderme

Uygulamanız için geçerli olan güvenlik konusunun sonundaki Blazor WebAssembly Sorun giderme yönergelerini izleyin:

Tek başına Blazor WebAssembly uygulamaları:

Barındırılan Blazor WebAssembly uygulamaları:

Microsoft Entra ID (ME-ID) için yetkisiz istemci

Kimlik doğrulaması için AAD kullanan bir Blazor WebAssembly uygulamayı yükselttikten sonra, kullanıcı AAD ile oturum açtığında uygulamaya yapılan oturum açma geri çağırmasında aşağıdaki hatayı alabilirsiniz:

bilgi: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] Yetkilendirme başarısız oldu. Bu gereksinimler karşılanmadı: DenyAnonymousAuthorizationRequirement: Kimliği doğrulanmış bir kullanıcı gerektirir.

AAD'den oturum açma geri çağırma hatası:

  • Hata: unauthorized_client
  • Açıklama: AADB2C90058: The provided application is not configured to allow public clients.

Hatayı düzeltmek için:

  1. Azure portalında uygulamanın bildirimine erişin.
  2. özniteliğini allowPublicClient veya trueolarak null ayarlayın.

Blazor Aşamalı Web Uygulamasını (PWA) Güncelleştirme

PWA uygulamasının proje dosyasına aşağıdaki öğeyi ekleyin:

<ItemGroup>
  <ServiceWorker Include="wwwroot\service-worker.js" 
    PublishedContent="wwwroot\service-worker.published.js" />
</ItemGroup>

Projenin wwwroot/index.html (Blazor WebAssembly) veya Pages/_Host.cshtml (Blazor Server) önceki 5.0 önizleme sürümünden bir scoped.styles.css stil sayfası <link> öğesi içeriyorsa, etiketini kaldırın<link>:

-<link href="_framework/scoped.styles.css/" rel="stylesheet" />

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

ASP.NET Core 5.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>net5.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>net5.0</TargetFramework>
    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>
  </PropertyGroup>

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 5.0.0 veya üzeri sürümlere 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="5.0.0" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.0">
+    <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0" />
+    <PackageReference Include="System.Net.Http.Json" Version="5.0.0" />
</ItemGroup>

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

Docker kullanan uygulamalar için Dockerfile FROM deyimlerinizi ve betiklerinizi güncelleştirin. ASP.NET Core 5.0 çalışma zamanını içeren bir temel görüntü kullanın. ASP.NET Core 3.1 ile 5.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:5.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 . dotnet/dotnet-docker#1939.

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

DateTime değerleri modele UTC saatleriyle 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ğerlerden bağlanan 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 yerine 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 kullanımdan kaldırıldı

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 bu GitHub konusuna bakın.

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.

Bazı NuGet paketlerini etkileyen paket başvurusu değişiklikleri

Dotnet/extensions deposundaki bazı Microsoft.Extensions.* NuGet paketlerinin dotnet/runtime'a geçirilmesiyle, dotnet/runtime ve dotnet/aspnetcore'a (aspnet/Announcements #411) dotnet/extensions içeriğini geçirme bölümünde açıklandığı gibi, geçirilen paketlerden bazılarına paketleme değişiklikleri uygulanır. Bu değişiklikler genellikle .NET API'sinde ad alanı değişiklikleriyle sonuçlanır.

5.0'a geçiş yaparken uygulama ad alanı değişikliklerine yönelik API'leri daha fazla araştırmak için .NET API tarayıcısını kullanın.

Microsoft'u geçir..Identity. Web

Aşağıdaki wiki sayfalarında Microsoft'un nasıl geçir yapılacağı açıklanmaktadır..Identity. ASP.NET Core 3.1'den 5.0'a web:

Aşağıdaki öğreticilerde geçiş işlemi de açıklanmaktadır:

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

.NET Core 3.1'den .NET 5.0'a hataya neden olan değişiklikler için bkz . Sürüm 3.1'den 5.0'a geçiş için hataya neden olan değişiklikler. ASP.NET Core ve Entity Framework Core da listeye dahil edilir.