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

Scott Addie tarafından

Bu makalede mevcut bir ASP.NET Core 3.1 projesini 5.0'a ASP.NET Core güncelleştirme işlemi açıklanmıştır.

Önkoşullar

güncelleştirme .NET Core SDK sürümünde global.jsgüncelleştirme

Belirli birglobal.js sürümünü hedeflemek için bir dosyada .NET Core SDK, özelliği yüklü version .NET 5.0 SDK sürümüne güncelleştirin. Örnek:

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

Hedef çerçeveyi güncelleştirme

Bir projeyi Blazor WebAssembly güncelleştiriyorsanız Projeleri güncelleştirme bölümüne Blazor WebAssembly atlayabilirsiniz. Diğer tüm ASP.NET Core proje türü için, proje dosyasının Hedef Çerçeve Bilinen Adını (TFM) olarak güncelleştirin: net5.0

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

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

</Project>

Ve bin obj klasörlerini silme

ve klasörlerini bin obj silmeniz gerekir. Paket dotnet nuget locals --clear all önbelleğini temizlemek NuGet çalıştırın.

Blazor5.0.1 ve sonraki 5.x sürümlerde 6.0'a kadar olan uygulama yönlendirme mantığı değişiklikleri

5.0.1 düzeltme eki ASP.NET Core yol önceliği hesaplaması değişti. Bu durum, isteğe bağlı parametrelerle tüm catch yollarını veya yollarını tanımladıysanız sizi etkileyebilir.

Eski davranış

ASP.NET Core 5.0.0 veya önceki bir sürümde önceki davranışla, gibi daha düşük önceliğe sahip yollar gibi daha yüksek önceliğe sahip {*slug} yollarla /customer/{id} eştir.

Yeni davranış

ASP.NET Core 5.0.1 veya sonraki bir sonraki bir sonraki adım, çerçevenin ilk olarak her segment için yol öncesini hesaplandığı ve kurduğu ve yalnızca ikincil ölçüt olarak bağlarını bozmak için yol uzunluğunu kullandığı ASP.NET Core uygulamaları içinde tanımlanan yönlendirme davranışıyla eşler.

Değişiklik nedeni

Asıl davranış, yönlendirme sisteminin yönlendirme tarafından desteklenen özelliklerin alt kümesi için ASP.NET Core yönlendirme sistemiyle aynı şekilde davranması nedeniyle uygulamada hata olarak Blazor kabul Blazor edilir.

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

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

olarak PreferExactMatches @true ayarlanırsa, yol eşleştirme joker karakterler yerine tam eşleşmeleri tercih eder.

Önemli

Tüm uygulamalar olarak ayarlanmış olması PreferExactMatches @true gerekir.

olarak ayarlama veya PreferExactMatches @false kümeyi geri bırakma özelliği yalnızca geriye dönük uyumluluk için sağlanır.

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

Güncelleştirme Blazor WebAssembly ve Blazor Server projeler

Bu bölümdeki kılavuz her iki barındırma modeli Blazor için de geçerlidir. Bu bölümden sonraki bölümler, barındırma modelleri ve uygulama türlerine özgü ek rehberlik sağlar. Tüm ilgili bölümlerden gelen kılavuzu uygulamanıza uygulama.

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

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

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

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

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

    +<link href="BlazorSample.Client.styles.css" rel="stylesheet" />
    
  2. Bileşen sanallaştırması için uygulamanın dosyasına _Imports.razor yeni bir ad alanı ekleyin. Microsoft.AspNetCore.Components.Web.Virtualization Aşağıdaki _Imports.razor dosyalar, proje şablonlarından oluşturulan uygulamalarda varsayılan ad Blazor alanlarını gösterir. Yer {ASSEMBLY NAME} tutucu, 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şeninde MainLayout ( Shared/MainLayout.razor ), bileşenin HTML işaretlemesini, özniteliği olarak ayarlanmış <div> bir class öğeyle page çevreler:

    <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 wwwroot/css/app.css uygulamanın veya Blazor WebAssembly uygulamanın en wwwroot/css/site.css son temel dosyası aşağıdaki stilleri Blazor Server içerir. Aşağıdaki stilleri ve uygulamaya eklediklerini 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:

    @import url('open-iconic/font/css/open-iconic-bootstrap.min.css');
    
    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;
    }
    

Projeleri Blazor WebAssembly güncelleştirme

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

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

  1. SDK'yı olarak Microsoft.NET.Sdk.Web Microsoft.NET.Sdk.BlazorWebAssembly güncelleştirin:

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

    Not

    Bu güncelleştirme yalnızca tek başına projeler Blazor WebAssembly ve Client barındırılan çözümlerin projeleri için Blazor 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 adresinde bulunabilir.

  5. içinde, wwwroot/index.html öğesini olarak ayarlanmış bir App öğeye <div> yüken öğesini id app değiştirir:

    -<app>Loading...</app>
    +<div id="app">Loading...</div>
    
  6. ( Program.Main Program.cs içinde), öğesine bir karma ekleyerek öğe <app> başvurularını CSS # seçicisi olarak değiştirebilirsiniz:

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

    -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 çözümlerin uygulamasının ( Program.cs ) Client Blazor içinde:

    • İsteğe bağlı olarak, builder.HostEnvironment.BaseAddress dize istemcisi temel adreslerinin yerine kullanın.
    • Adlandırılmış geçici istemci fabrikası kayıtlarını kapsamlı olarak değiştirme.
    -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"));
    

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

Blazor WebAssemblyMicrosoft Hesapları ile tek başına uygulama

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

Microsoft Hesapları için Blazor WebAssembly Azure portal (AAD) kullanmak üzere Azure Active Directory tek başına bir uygulama için:

  • Uygulama için ve openid offline_access kapsamları gerekir:

    options.ProviderOptions.DefaultAccessTokenScopes.Add("openid");
    options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
    
  • Uygulama kaydı Azure portal dikey penceresinde:

    1. Web platformu yapılandırmasını kaldırın.
    2. Uygulamanın yeniden yönlendirme URI'sini kullanarak Tek sayfalı uygulama platformu yapılandırması ekleyin.
    3. Erişim belirteçleri ve kimlik belirteçleri için Örtülü izni devre dışı bırakma.

Daha fazla bilgi için bkz. Blazor WebAssemblyMicrosoft hesaplarıyla ASP.NET Core tek başına uygulamayı güvenli hale getirme.

Blazor WebAssemblyAzure Active Directory (AAD) ile tek başına uygulama

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

Blazor WebAssemblyAzure portal(AAD) Azure Active Directory uygulama için:

  • Uygulamanın kapsamı https://graph.microsoft.com/User.Read gerekir:

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

    1. Web platformu yapılandırmasını kaldırın.
    2. Uygulamanın yeniden yönlendirme URI'sini kullanarak Tek sayfalı uygulama platformu yapılandırması ekleyin.
    3. Erişim belirteçleri ve kimlik belirteçleri için Örtülü izni devre dışı bırakma.

Daha fazla bilgi için bkz. Tek başına ASP.NET Core Blazor WebAssembly uygulamanın güvenliğini Azure Active Directory.

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

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

Azure portal Blazor WebAssembly (AAD) B2C'yi kullanmak üzere Azure Active Directory tek başına bir uygulama için:

  • Uygulama için ve openid offline_access kapsamları gerekir:

    options.ProviderOptions.DefaultAccessTokenScopes.Add("openid");
    options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
    
  • Uygulama kaydı Azure portal dikey penceresinde:

    1. Web platformu yapılandırmasını kaldırın.
    2. Uygulamanın yeniden yönlendirme URI'sini kullanarak Tek sayfalı uygulama platformu yapılandırması ekleyin.
    3. Erişim belirteçleri ve kimlik belirteçleri için Örtülü izni devre dışı bırakma.

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

Azure Active Directory Blazor WebAssembly (AAD) veya AAD B2C

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

Kullanıcı kimlik doğrulaması için AAD veya AAD B2C kullanan barındırılan bir çözümün uygulama kaydında Tek sayfalı uygulama Client Azure Apps platform yapılandırması kullan Blazor gerekir.

Uygulama Azure portal Client Kimlik Doğrulaması dikey penceresinde:

  1. Web platformu yapılandırmasını kaldırın.
  2. Uygulamanın yeniden yönlendirme URI'sini kullanarak Tek sayfalı uygulama platformu yapılandırması ekleyin.
  3. Erişim belirteçleri ve kimlik belirteçleri için Örtülü izni devre dışı bırakma.

Daha fazla bilgi için bkz.

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

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

barındırılan bir Server çözümün projesini, Blazor bu makaledeki genel kılavuzdan sonra ASP.NET Core uygulama olarak güncelleştirin.

ayrıca, Server Blazor WebAssembly Azure Active Directory (AAD) veya B2C ile istemci uygulamalarında kullanıcıların kimliğini doğrulayan projeler yeni Microsoft Identity v 2.0 paketlerini benimsemelidir:

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 {VERSION} NuGet. org konumundaki yer tutucular için paket sürümlerini saptayın:

Not

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

<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. Paket uyumsuzlukları yeni paket başvuruları ve önbelleğe alınmış paketler arasında mevcutsa:

  1. bir komut kabuğu 'nda aşağıdaki komutu yürüterek NuGet paket önbelleklerini temizleyin dotnet nuget locals :

    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 sorun giderme kılavuzunu izleyin Blazor WebAssembly :

Tek başına Blazor WebAssembly uygulamalar:

Barındırılan Blazor WebAssembly uygulamalar:

Azure Active Directory için yetkisiz istemci (AAD)

Blazor WebAssemblyKimlik doğrulaması IÇIN AAD kullanan bir uygulamayı yükselttikten sonra, Kullanıcı AAD ile oturum açtıktan sonra uygulamaya oturum açma geri aramasında aşağıdaki hatayı alabilirsiniz:

bilgi: Microsoft. AspNetCore. Authorization. DefaultAuthorizationService [2] yetkilendirmesi 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çıklaması AADB2C90058: The provided application is not configured to allow public clients.

Hatayı gidermek için:

  1. Azure portal, uygulamanın bildirimineerişin.
  2. allowPublicClientÖzniteliğini veya olarak ayarlayın null true .

Aşamalı bir Blazor Web uygulamasını güncelleştirme (PWA)

aşağıdaki öğeyi PWA uygulamasının proje dosyasına 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 ) <link> daha önceki bir 5,0 Önizleme sürümünden için bir stil sayfası öğesi içeriyorsa scoped.styles.css , <link> etiketini kaldırın:

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

RazorSınıf kitaplıklarını güncelleştirme (RCLs)

RazorASP.NET Core 5,0 kapsamında sunulan yeni apı 'lerden veya özelliklerden yararlanmak için sınıf kitaplıklarını (rcls) geçirin.

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. orgyolunda bulunabilir.

Bir RCL hedefleme MVC 'yi güncelleştirmek için proje dosyasında 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ştir

Proje dosyasında, her bir Microsoft. AspNetCore. *, Microsoft. entityframeworkcore. *, Microsoft. Extensions. *ve System.Net.Http.Js paket başvurusunun Version özniteliğinde 5.0.0 veya sonraki bir sürüme güncelleştirin. Örnek:

<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 betikleri güncelleştirin. ASP.NET Core 5,0 çalışma zamanını içeren bir temel görüntü kullanın. docker pullASP.NET Core 3,1 ve 5,0 arasındaki aşağıdaki 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 kapsamında, Docker görüntüleri mcr.microsoft.com/dotnet/core depolardan öğesine taşınır mcr.microsoft.com/dotnet . Daha fazla bilgi için bkz. DotNet/DotNet-Docker # 1939.

ASP.NET Core MVC ve sayfalarında Model bağlama değişiklikleri Razor

DateTime değerleri UTC zamanları olarak modeldir

ASP.NET Core 3,1 ve önceki sürümlerde, DateTime değerler saat diliminin sunucu tarafından belirlendiği yerel saat olarak model bağlasıydı. DateTime Giriş biçimlendirme (JSON) ve değerleri ile sınırlı değerler DateTimeOffset UTC Timezones olarak bağlıydı.

ASP.NET Core 5,0 ve üzeri sürümlerde, model bağlama DateTime değerleri UTC saat dilimiyle tutarlı bir şekilde bağlar.

Önceki davranışı sürdürmek için, DateTimeModelBinderProvider içindeki ' ı kaldırın Startup.ConfigureServices :

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

ComplexObjectModelBinderProvider \ Complexobjectmodelciltçi Replace ComplexTypeModelBinderProvider \ Complextypemodelciltçi

Model bağlama C# 9 kayıt türleriiçin destek eklemek üzere, ComplexTypeModelBinderProvider Şu olur:

  • Eski olarak açıklanmalıdır.
  • Artık varsayılan olarak kayıtlı değildir.

Koleksiyonda bulunan öğesinin varlığına bağlı olan uygulamaların ComplexTypeModelBinderProvider ModelBinderProviders Yeni Ciltçi sağlayıcısına başvurması gerekir:

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

UseDatabaseErrorPage artık kullanılmıyor

bireysel kullanıcı hesapları için bir seçenek içeren ASP.NET Core 3,1 şablonları, öğesine bir çağrı oluşturur UseDatabaseErrorPage . UseDatabaseErrorPage artık kullanımdan kalkmıştır ve AddDatabaseDeveloperPageExceptionFilter UseMigrationsEndPoint aşağıdaki kodda gösterildiği gibi ve bir birleşimiyle 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 sorunabakın.

Son değişiklikleri gözden geçir

.NET Core 3,1 ' den .NET 5,0 ' ye son değişiklikler için, sürüm 3,1 ' den 5,0 ' e geçiş Için Son değişikliklerkonusuna bakın ASP.NET Core ve Entity Framework Core listede de bulunur.