Migrace z ASP.NET Core 3.1 na 5.0

Tento článek vysvětluje, jak aktualizovat existující projekt ASP.NET Core 3.1 na ASP.NET Core 5.0. Pokyny k migraci z ASP.NET Core 3.1 na ASP.NET Core 6.0 najdete v tématu Migrace z ASP.NET Core 3.1 na 6.0.

Požadavky

Aktualizace verze sady .NET Core SDK v global.json

Pokud spoléháte na global.json soubor, který má cílit na konkrétní verzi sady .NET Core SDK, aktualizujte version vlastnost na nainstalovanou verzi sady .NET 5.0 SDK. Příklad:

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

Aktualizace cílové architektury

Pokud aktualizujete Blazor WebAssembly projekt, přejděte do části Aktualizovat Blazor WebAssembly projekty . V případě jakéhokoli jiného typu projektu ASP.NET Core aktualizujte moniker cílového rozhraní (TFM) souboru projektu nanet5.0:

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

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

</Project>

Odstranění bin a obj složky

Možná budete muset odstranit bin složky a obj složky. Spuštěním vymažte dotnet nuget locals --clear all mezipaměť balíčků NuGet.

Blazor Změny logiky směrování aplikací ve verzi 5.0.1 a dalších verzích 5.x až 6.0

Výpočet priority trasy se změnil ve verzi opravy ASP.NET Core 5.0.1. To vás může ovlivnit, pokud jste definovali trasy catch-all nebo trasy s volitelnými parametry.

Staré chování

Při předchozím chování v ASP.NET Core 5.0.0 nebo starších trasách s nižší prioritou, například {*slug}, se shodují před trasami s vyšší prioritou, například /customer/{id}.

Nové chování

Nové chování ve službě ASP.NET Core 5.0.1 nebo novější blíže odpovídá chování směrování definované v aplikacích ASP.NET Core, kde architektura vypočítá a určí prioritu trasy pro každý segment jako první a použije délku trasy pouze k přerušení vazeb jako sekundárních kritérií.

Důvod změny

Původní chování se považuje za chybu v implementaci, protože naším cílem je Blazor , aby se systém směrování choval stejným způsobem jako systém směrování ASP.NET Core pro podmnožinu funkcí podporovaných směrováním Blazor .

PreferExactMatches Přidejte atribut do Router komponenty v App.razor souboru, abyste se přihlásili ke správnému chování:

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

Pokud PreferExactMatches je nastavená hodnota @true, porovnávání tras dává přednost přesným shodám oproti zástupným znakům.

Důležité

Všechny aplikace by měly explicitně nastavit PreferExactMatches .@true

Možnost nastavit PreferExactMatches@false nebo ponechat nesmnožinu je poskytována pouze kvůli zpětné kompatibilitě.

Po vydání rozhraní .NET 6 bude směrovač vždy upřednostňovat přesné shody a PreferExactMatches tato možnost nebude dostupná.

Aktualizace Blazor WebAssembly a Blazor Server projekty

Pokyny v této části platí pro oba Blazor modely hostování. V následujících částech najdete další pokyny specifické pro hostování modelů a typů aplikací. Použijte pokyny ze všech relevantních částí vaší aplikace.

  1. Blazor WebAssembly V wwwroot/index.html aplikaci nebo Blazor ServerPages/_Host.cshtml aplikaci přidejte <link> prvek do elementu <head> pro styly. V následujících <link> hodnotách atributů elementu href je zástupný symbol {ASSEMBLY NAME} názvem sestavení aplikace.

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

    Blazor WebAssembly Samostatný nebo Blazor Server příklad:

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

    Client příklad hostovaného Blazor WebAssembly řešení:

    +<link href="BlazorSample.Client.styles.css" rel="stylesheet" />
    
  2. Do souboru aplikace _Imports.razor pro virtualizaciMicrosoft.AspNetCore.Components.Web.Virtualization komponent zahrňte nový obor názvů. Následující _Imports.razor soubory zobrazují výchozí obory názvů v aplikacích vygenerovaných ze Blazor šablon projektů. Zástupný symbol {ASSEMBLY NAME} je název sestavení aplikace.

    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. V komponentě MainLayout (Shared/MainLayout.razor) ohraničujte kód <div> HTML komponenty elementemclass, který má nastavený atribut:page

    <div class="page">
    
        ...
    
    </div>
    
  4. Do složky přidejte následující soubory Shared :

    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. Nejnovější základní wwwroot/css/app.css soubor Blazor WebAssembly aplikace nebo wwwroot/css/site.css souboru Blazor Server aplikace obsahuje následující styly. Odeberte nadbytečné styly a nechte následující styly a všechny, které jste přidali do aplikace.

    Následující šablona stylů obsahuje pouze základní styly a neobsahuje vlastní styly přidané vývojářem:

    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;
    }
    

    Poznámka

    Předchozí příklad nezobrazuje direktivu @import pro ikony Open Icon (open-iconic-bootstrap.css), kterou Blazor poskytuje šablona projektu. Open Kultovní byl opuštěn svými správci.

Aktualizace Blazor WebAssembly projektů

Postupujte podle pokynů v předchozí části Aktualizace Blazor WebAssembly a Blazor Server projekty .

Blazor WebAssembly U projektu, včetně Client projektu hostovaného Blazor řešení, použijte v souboru projektu následující změny:

  1. Aktualizujte sadu SDK zMicrosoft.NET.Sdk.Web:Microsoft.NET.Sdk.BlazorWebAssembly

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

    Poznámka

    Tato aktualizace se vztahuje pouze na samostatné Blazor WebAssembly projekty a Client projekty hostovaných Blazor řešení.

  2. Aktualizujte následující vlastnosti:

    <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
    
      <PropertyGroup>
    -     <TargetFramework>netstandard2.1</TargetFramework>
    -     <RazorLangVersion>3.0</RazorLangVersion>
    +     <TargetFramework>net5.0</TargetFramework>
      </PropertyGroup>
    
  3. Odeberte odkaz na balíček Microsoft.AspNetCore.Components.WebAssembly.Build:

    <ItemGroup>
    -    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Build" Version="3.2.1" PrivateAssets="all" />
    
  4. Aktualizujte další balíčky na nejnovější verze. Nejnovější verze najdete v NuGet.org.

  5. V wwwroot/index.html, změnit prvek, který načte App komponentu do <div> elementu s nastavenou id na app:

    -<app>Loading...</app>
    +<div id="app">Loading...</div>
    
  6. V Program.Main (Program.cs) změňte odkaz na <app> prvek na selektor CSS přidáním hodnoty hash # do něj:

    -builder.RootComponents.Add<App>("app");
    +builder.RootComponents.Add<App>("#app");
    
  7. V Program.Main (Program.cs) změňte výchozí přechodnou HttpClient registraci na vymezenou, pokud existuje:

    -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. V Program.Main (Program.cs) Client aplikaci hostovaných Blazor řešení:

    • Volitelně můžete nahradit builder.HostEnvironment.BaseAddress řetězcové základní adresy klienta.
    • Změňte všechny pojmenované přechodné registrace klientské továrny na vymezený obor.
    -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"));
    

    V předchozím kódu {APP NAMESPACE} je zástupný symbol obor názvů aplikace.

Samostatná Blazor WebAssembly aplikace s účty Microsoft

Postupujte podle pokynů v předchozích částech Aktualizace Blazor WebAssembly a Blazor Server projekty a Aktualizace Blazor WebAssembly projektů .

Pro samostatnou Blazor WebAssembly aplikaci zaregistrovanou na webu Azure Portal pro použití Microsoft Entra ID (ME-ID) pro účty Microsoft:

  • Aplikace vyžaduje obory openid a offline_access obory:

    options.ProviderOptions.DefaultAccessTokenScopes.Add("openid");
    options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
    
  • V okně Ověřování registrace aplikace na webu Azure Portal:

    1. Odeberte konfiguraci webové platformy.
    2. Přidejte konfiguraci jednostrákové aplikační platformy pomocí identifikátoru URI přesměrování aplikace.
    3. Zakažte implicitní udělení přístupových tokenů a tokenů ID.

Další informace najdete v tématu Zabezpečení samostatné aplikace ASP.NET Core Blazor WebAssembly pomocí účtů Microsoft.

Samostatná Blazor WebAssembly aplikace s Microsoft Entra ID (ME-ID)

Postupujte podle pokynů v předchozích částech Aktualizace Blazor WebAssembly a Blazor Server projekty a Aktualizace Blazor WebAssembly projektů .

Pro samostatnou Blazor WebAssembly aplikaci zaregistrovanou na webu Azure Portal pro použití MICROSOFT Entra ID (ME-ID):

  • Aplikace vyžaduje https://graph.microsoft.com/User.Read obor:

    options.ProviderOptions.DefaultAccessTokenScopes
        .Add("https://graph.microsoft.com/User.Read");
    
  • V okně Ověřování registrace aplikace na webu Azure Portal:

    1. Odeberte konfiguraci webové platformy.
    2. Přidejte konfiguraci jednostrákové aplikační platformy pomocí identifikátoru URI přesměrování aplikace.
    3. Zakažte implicitní udělení přístupových tokenů a tokenů ID.

Další informace najdete v tématu Zabezpečení samostatné aplikace ASP.NET Core Blazor WebAssembly pomocí Microsoft Entra ID.

Samostatná Blazor WebAssembly aplikace s Azure Active Directory (AAD) B2C

Postupujte podle pokynů v předchozích částech Aktualizace Blazor WebAssembly a Blazor Server projekty a Aktualizace Blazor WebAssembly projektů .

Pro samostatnou Blazor WebAssembly aplikaci zaregistrovanou na webu Azure Portal pro použití Azure Active Directory (AAD) B2C:

  • Aplikace vyžaduje obory openid a offline_access obory:

    options.ProviderOptions.DefaultAccessTokenScopes.Add("openid");
    options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
    
  • V okně Ověřování registrace aplikace na webu Azure Portal:

    1. Odeberte konfiguraci webové platformy.
    2. Přidejte konfiguraci jednostrákové aplikační platformy pomocí identifikátoru URI přesměrování aplikace.
    3. Zakažte implicitní udělení přístupových tokenů a tokenů ID.

Další informace najdete v tématu Zabezpečení samostatné aplikace ASP.NET Core Blazor WebAssembly pomocí Azure Active Directory B2C.

Hostovaná Blazor WebAssembly aplikace s Microsoft Entra ID (ME-ID) nebo AAD B2C

Postupujte podle pokynů v předchozích částech Aktualizace Blazor WebAssembly a Blazor Server projekty a Aktualizace Blazor WebAssembly projektů .

Registrace Client aplikace hostovaného Blazor řešení, které pro ověřování uživatelů používá AAD nebo AAD B2C, by měla používat jednostrákovou aplikaci Aplikace Azure s konfiguraci platformy.

V okně Ověřování registrace aplikace na webu Azure PortalClient:

  1. Odeberte konfiguraci webové platformy.
  2. Přidejte konfiguraci jednostrákové aplikační platformy pomocí identifikátoru URI přesměrování aplikace.
  3. Zakažte implicitní udělení přístupových tokenů a tokenů ID.

Další informace naleznete v tématu:

Aktualizace projektu serveru hostovaného Blazor řešení

Postupujte podle pokynů v předchozích částech:

Server Aktualizujte projekt hostovaného Blazor řešení jako aplikaci ASP.NET Core podle obecných pokynů v tomto článku.

Kromě toho by projekty, které ověřují uživatele v klientských Blazor WebAssembly aplikacích pomocí MICROSOFT Entra ID (ME-ID) nebo B2C, Server měly přijímat nové balíčky Microsoftu Identity v2.0:

Pro AAD:

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

Pro AAD B2C:

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

U předchozích odkazů na balíčky určete verze balíčků pro {VERSION} zástupné symboly v NuGet.org:

Poznámka

Sada SDK Server projektu v hostovaném Blazor WebAssembly řešení zůstává Microsoft.NET.Sdk.Web:

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

Další informace naleznete v tématu:

Vyčištění a opětovné sestavení řešení

Po migraci aplikace nebo řešení do .NET 5 vyčistěte a znovu sestavte aplikaci nebo řešení. Pokud mezi novými odkazy na balíčky a balíčky uloženými v mezipaměti existují nekompatibility balíčků:

  1. Vymažte mezipaměti balíčků NuGet spuštěním následujícího dotnet nuget locals příkazu v příkazovém prostředí:

    dotnet nuget locals --clear all
    
  2. Vyčistěte a znovu sestavte aplikaci nebo řešení.

Odstranění potíží

Postupujte podle pokynů k řešení potíží na konci Blazor WebAssembly tématu zabezpečení, které platí pro vaši aplikaci:

Samostatné aplikace Blazor WebAssembly:

Hostované aplikace Blazor WebAssembly:

Neautorizovaný klient pro Microsoft Entra ID (ME-ID)

Po upgradu Blazor WebAssembly aplikace, která k ověřování používá AAD, se může po přihlášení uživatele pomocí AAD zobrazit následující chyba při zpětném volání přihlášení k aplikaci:

info: Autorizace Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] selhala. Tyto požadavky nebyly splněny: DenyAnonymousAuthorizationRequirement: Vyžaduje ověřeného uživatele.

Chyba zpětného volání přihlášení z AAD:

  • Chyba: unauthorized_client
  • Popis: AADB2C90058: The provided application is not configured to allow public clients.

Řešení chyby:

  1. Na webu Azure Portal přejděte k manifestu aplikace.
  2. allowPublicClient Nastavte atribut na null nebo true.

Blazor Aktualizace progresivní webové aplikace (PWA)

Do souboru projektu aplikace PWA přidejte následující položku:

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

Pokud projekt wwwroot/index.html (Blazor WebAssembly) nebo Pages/_Host.cshtml (Blazor Server) obsahuje prvek šablony <link> stylů ze scoped.styles.css starší verze Preview 5.0, odeberte <link> značku:

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

Aktualizace Razor knihoven tříd (RCLS)

Migrujte Razor knihovny tříd (RCLS), abyste mohli využívat nová rozhraní API nebo funkce, které jsou zavedeny jako součást ASP.NET Core 5.0.

Aktualizace seznamu RCL, který cílí na komponenty:

  1. V souboru projektu aktualizujte následující vlastnosti:

    <Project Sdk="Microsoft.NET.Sdk.Razor">
    
      <PropertyGroup>
    -     <TargetFramework>netstandard2.0</TargetFramework>
    -     <RazorLangVersion>3.0</RazorLangVersion>
    +     <TargetFramework>net5.0</TargetFramework>
      </PropertyGroup>
    
  2. Aktualizujte další balíčky na nejnovější verze. Nejnovější verze najdete v NuGet.org.

Pokud chcete aktualizovat seznam RCL určený pro MVC, aktualizujte v souboru projektu následující vlastnosti:

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

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

Aktualizace odkazů na balíčky

V souboru projektu aktualizujte každý odkaz na Version balíček Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.*a System.Net.Http.Json atribut odkazu na balíček 5.0.0 nebo novější. Příklad:

<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>

Aktualizace imagí Dockeru

U aplikací používajících Docker aktualizujte příkazy a skripty DockerfileFROM . Použijte základní image, která zahrnuje modul runtime ASP.NET Core 5.0. Představte si následující docker pull rozdíl mezi ASP.NET Core 3.1 a 5.0:

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

V rámci přechodu na .NET jako název produktu se image Dockeru přesunuly z mcr.microsoft.com/dotnet/core úložišť do mcr.microsoft.com/dotnet. Další informace najdete v tématu dotnet/dotnet-docker#1939.

Změny vazby modelu ve ASP.NET Core MVC a Razor Stránkách

Hodnoty DateTime jsou vázané jako časy UTC.

V ASP.NET Core 3.1 a starších DateTime byly hodnoty vázané na model jako místní čas, kdy server určil časové pásmo. DateTime hodnoty vázané ze vstupního formátování (JSON) a DateTimeOffset hodnoty byly vázány jako časové pásmo UTC.

V ASP.NET Core 5.0 a novější vazby modelu konzistentně DateTime sváže hodnoty s časovým pásmem UTC.

Chcete-li zachovat předchozí chování, odeberte v Startup.ConfigureServices:DateTimeModelBinderProvider

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

ComplexObjectModelBinderProvider \ ComplexObjectModelBinder replace ComplexTypeModelBinderProvider \ ComplexTypeModelBinder

Pokud chcete přidat podporu pro typy záznamů C# 9 vazby modelu, je následujícíComplexTypeModelBinderProvider:

  • Poznámka je zastaralá.
  • Ve výchozím nastavení už není zaregistrovaný.

Aplikace, které spoléhají na přítomnost ComplexTypeModelBinderProvider v ModelBinderProviders kolekci, musí odkazovat na nového poskytovatele pořadače:

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

Zastaralé aplikace UseDatabaseErrorPage

Šablony ASP.NET Core 3.1, které obsahují možnost pro jednotlivé uživatelské účty, generují volání UseDatabaseErrorPage. UseDatabaseErrorPage je nyní zastaralý a měl by být nahrazen kombinací AddDatabaseDeveloperPageExceptionFilter a UseMigrationsEndPoint, jak je znázorněno v následujícím kódu:

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();
    }

Další informace najdete u tohoto problému na GitHubu.

modul ASP.NET Core (ANCM)

Pokud ASP.NET Core Module (ANCM) nebyla vybraná komponenta při instalaci sady Visual Studio nebo pokud byla v systému nainstalována předchozí verze ANCM, stáhněte si nejnovější instalační program balíčku hostingu .NET Core (přímý stažení) a spusťte instalační program. Další informace naleznete v tématu Hosting Bundle.

Změny odkazů na balíčky ovlivňující některé balíčky NuGet

Při migraci některých Microsoft.Extensions.* balíčků NuGet z úložiště dotnet/extensions dotnet /runtime, jak je popsáno v tématu Migrace obsahu dotnet/runtime/ rozšíření dotnet/runtime a dotnet/aspnetcore (aspnet/Oznámení #411) se změny balení použijí na některé migrované balíčky. Tyto změny často vedou ke změnám oboru názvů pro rozhraní .NET API.

Pokud chcete dále zkoumat rozhraní API pro změny oboru názvů aplikací při migraci na verzi 5.0, použijte prohlížeč rozhraní .NET API.

Migrujte Microsoft.Identity. Webové

Následující stránky wikiwebu vysvětlují, jak migrovat Microsoft.Identity. Web z ASP.NET Core 3.1 na 5.0:

Následující kurzy také vysvětlují migraci:

Kontrola zásadních změn

Zásadní změny z .NET Core 3.1 na .NET 5.0 najdete v tématu Zásadní změny migrace z verze 3.1 na 5.0. ASP.NET Core a Entity Framework Core jsou také zahrnuté v seznamu.