Dela via


Migrera från ASP.NET Core 3.1 till 5.0

I den här artikeln beskrivs hur du uppdaterar ett befintligt ASP.NET Core 3.1-projekt till ASP.NET Core 5.0. Anvisningar om hur du migrerar från ASP.NET Core 3.1 till ASP.NET Core 6.0 finns i Migrera från ASP.NET Core 3.1 till 6.0.

Förutsättningar

Uppdatera .NET Core SDK-versionen i global.json

Om du förlitar dig på en global.json fil för att rikta in dig på en specifik .NET Core SDK-version uppdaterar du egenskapen version till den .NET 5.0 SDK-version som är installerad. Till exempel:

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

Uppdatera målramverket

Om du uppdaterar ett Blazor WebAssembly projekt, hoppa till avsnittet Uppdatera Blazor WebAssembly projekt. För andra ASP.NET Core-projekttyper uppdaterar du projektfilens Target Framework Moniker (TFM) till net5.0:

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

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

</Project>

Ta bort bin och obj mappar

Du kan behöva ta bort mapparna bin och obj. Kör dotnet nuget locals --clear all för att rensa NuGet-paketcachen.

Ändringar i Blazor appdirigeringslogik i 5.0.1 och ytterligare 5.x-versioner upp till 6.0

Beräkningen av routningsprioriteten ändrades i ASP.NET Core 5.0.1-korrigeringsversionen. Detta kan påverka dig om du har definierat catch-all-vägar eller vägar med valfria parametrar.

Gammalt beteende

Med det tidigare beteendet i ASP.NET Core 5.0.0 eller tidigare matchas vägar med lägre prioritet, till exempel {*slug}, före vägar med högre prioritet, till exempel /customer/{id}.

Nytt beteende

Det nya beteendet i ASP.NET Core 5.0.1 eller senare matchar routningsbeteendet som definieras i ASP.NET Core-appar, där ramverket beräknar och etablerar routningsprioriteten för varje segment först och endast använder längden på vägen för att bryta banden som ett sekundärt villkor.

Orsak till ändring

Det ursprungliga beteendet anses vara en bugg i implementeringen eftersom vårt mål är att Blazor routningssystemet ska bete sig på samma sätt som ASP.NET Core-routningssystemet för den delmängd av funktioner som stöds av Blazor routning.

Lägg till attributet PreferExactMatches till komponenten Router i App.razor-filen för att välja rätt beteende:

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

När PreferExactMatches är inställt på @trueföredrar vägmatchning exakta matchningar framför jokertecken.

Viktig

Alla appar bör uttryckligen ange PreferExactMatches till @true.

Möjligheten att ange PreferExactMatches till @false eller lämna den inte angett tillhandahålls endast för bakåtkompatibilitetens skull.

När .NET 6 släpps föredrar routern alltid exakta matchningar och alternativet PreferExactMatches är inte tillgängligt.

Uppdatera Blazor WebAssembly- och Blazor Server-projekt

Vägledningen i det här avsnittet gäller både Blazor värdmodeller. Avsnitt som följer det här avsnittet innehåller ytterligare vägledning som är specifik för värdmodeller och apptyper. Använd vägledningen från alla relevanta avsnitt i din app.

  1. I wwwroot/index.html av en Blazor WebAssembly-app eller Pages/_Host.cshtml för en Blazor Server app lägger du till ett <link>-element i <head>-elementet för formatmallar. I följande <link> element href attributvärden är platshållaren {ASSEMBLY NAME} appens sammansättningsnamn.

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

    Fristående Blazor WebAssembly eller Blazor Server exempel:

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

    Client projekt för ett värdbaserat Blazor WebAssembly lösningsexempel:

    +<link href="BlazorSample.Client.styles.css" rel="stylesheet" />
    
  2. Inkludera ett nytt namnområde i appens _Imports.razor-fil för komponentvirtualisering, Microsoft.AspNetCore.Components.Web.Virtualization. Följande _Imports.razor filer visar standardnamnrymderna i appar som genererats från Blazor projektmallar. Platshållaren {ASSEMBLY NAME} är appens samlingsnamn.

    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. I komponenten MainLayout (Shared/MainLayout.razor) omger du komponentens HTML-kod med ett <div>-element som har ett class-attribut inställt på page:

    <div class="page">
    
        ...
    
    </div>
    
  4. Lägg till följande filer i mappen 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. Den senaste grundläggande wwwroot/css/app.css filen för en Blazor WebAssembly-app eller wwwroot/css/site.css fil för en Blazor Server app innehåller följande formatmallar. Ta bort extra formatmallar men behåll följande formatmallar och alla som du har lagt till i appen.

    Följande formatmall innehåller endast basformat och inte inkludera anpassade format som har lagts till av utvecklaren:

    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

    Föregående exempel visar inte @import-direktivet för Open Iconic-ikoner (open-iconic-bootstrap.css), som tillhandahålls av Blazor-projektmallen. Open Iconic övergavs av sina ansvariga.

Uppdatera Blazor WebAssembly projekt

Följ riktlinjerna i föregående avsnittet Uppdatera Blazor WebAssembly och Blazor Server projekt.

För ett Blazor WebAssembly projekt, inklusive Client projektet för en värdbaserad Blazor lösning, tillämpar du följande ändringar i projektfilen:

  1. Uppdatera SDK:et från Microsoft.NET.Sdk.Web till Microsoft.NET.Sdk.BlazorWebAssembly:

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

    Not

    Den här uppdateringen gäller endast fristående Blazor WebAssembly projekt och Client projekt för värdbaserade Blazor lösningar.

  2. Uppdatera följande egenskaper:

    <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
    
      <PropertyGroup>
    -     <TargetFramework>netstandard2.1</TargetFramework>
    -     <RazorLangVersion>3.0</RazorLangVersion>
    +     <TargetFramework>net5.0</TargetFramework>
      </PropertyGroup>
    
  3. Ta bort paketreferensen till Microsoft.AspNetCore.Components.WebAssembly.Build:

    <ItemGroup>
    -    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Build" Version="3.2.1" PrivateAssets="all" />
    
  4. Uppdatera andra paket till de senaste versionerna. De senaste versionerna finns på NuGet.org.

  5. I wwwroot/index.htmländrar du elementet som läser in App-komponenten till ett <div>-element med en id inställd på app:

    -<app>Loading...</app>
    +<div id="app">Loading...</div>
    
  6. I Program.Main (Program.cs) ändrar du referensen till <app>-elementet till en CSS-väljare genom att lägga till en hash-# till den:

    -builder.RootComponents.Add<App>("app");
    +builder.RootComponents.Add<App>("#app");
    
  7. I Program.Main (Program.cs) ändrar du en standard transient HttpClient-registrering till nischerad, om den finns:

    -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. I Program.Main (Program.cs) i Client-appen för värdbaserade Blazor-lösningar:

    • Alternativt kan du ersätta builder.HostEnvironment.BaseAddress med strängklientbasadresser.
    • Ändra alla namngivna tillfälliga klientfabriksregistreringar till omfångsbundna.
    -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"));
    

    I föregående kod är platshållaren {APP NAMESPACE} appens namnrymd.

Fristående Blazor WebAssembly-app med Microsoft-konton

Följ anvisningarna i föregående Uppdatera Blazor WebAssembly och Blazor Server projekt och Uppdatera Blazor WebAssembly projekt avsnitt.

För en fristående Blazor WebAssembly app som är registrerad i Azure-portalen för att använda Microsoft Entra-ID (ME-ID) för Microsoft-konton:

  • Appen kräver omfången openid och offline_access:

    options.ProviderOptions.DefaultAccessTokenScopes.Add("openid");
    options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
    
  • På bladet för appregistrering i Azure-portalen Autentisering:

    1. Ta bort Web-plattformskonfigurationen.
    2. Lägg till en enkelsidesapplikation plattformskonfiguration med appens omdirigerings-URI.
    3. Inaktivera implicit beviljande av för åtkomsttoken och ID-token.

Mer information finns i Så här säkrar du en fristående ASP.NET Core-app med Microsoft-konton Blazor WebAssembly.

Fristående Blazor WebAssembly app med Microsoft Entra-ID (ME-ID)

Följ anvisningarna i föregående Uppdatera Blazor WebAssembly och Blazor Server projekt och Uppdatera Blazor WebAssembly projekt avsnitt.

För en fristående Blazor WebAssembly app som är registrerad i Azure-portalen för att använda Microsoft Entra-ID (ME-ID):

  • Appen kräver https://graph.microsoft.com/User.Read omfång:

    options.ProviderOptions.DefaultAccessTokenScopes
        .Add("https://graph.microsoft.com/User.Read");
    
  • I bladet för appregistrering i Azure-portalen autentisering:

    1. Ta bort Web-plattformskonfigurationen.
    2. Lägg till ett ensidesprogram plattformskonfiguration med appens omdirigerings-URI.
    3. Inaktivera implicit beviljande av för åtkomsttoken och ID-token.

Mer information finns i Secure an ASP.NET Core Blazor WebAssembly standalone app with Microsoft Entra ID.

Fristående Blazor WebAssembly app med Azure Active Directory (AAD) B2C

Följ anvisningarna i föregående Uppdatera Blazor WebAssembly och Blazor Server projekt och Uppdatera Blazor WebAssembly projekt avsnitt.

För en fristående Blazor WebAssembly app som är registrerad i Azure-portalen för att använda Azure Active Directory (AAD) B2C:

  • Appen kräver omfången openid och offline_access:

    options.ProviderOptions.DefaultAccessTokenScopes.Add("openid");
    options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
    
  • I bladet för appregistrering i Azure-portalen autentisering:

    1. Ta bort Web-plattformskonfigurationen.
    2. Lägg till ett ensidesprogram plattformskonfiguration med appens omdirigerings-URI.
    3. Inaktivera implicit beviljande av för åtkomsttoken och ID-token.

Mer information finns i Skydda en ASP.NET Core Blazor WebAssembly fristående app med Azure Active Directory B2C.

Värdbaserad Blazor WebAssembly app med Microsoft Entra-ID (ME-ID) eller AAD B2C

Följ anvisningarna i föregående Uppdatera Blazor WebAssembly och Blazor Server projekt och Uppdatera Blazor WebAssembly projekt avsnitt.

Client appregistrering av en värdbaserad Blazor lösning som använder AAD eller AAD B2C för användarautentisering bör använda ett ensidesprogram Azure Apps-plattformskonfiguration.

I Azure-portalen Client appregistrering autentisering-panelen:

  1. Ta bort Web-plattformskonfigurationen.
  2. Lägg till ett ensidesprogram plattformskonfiguration med appens omdirigerings-URI.
  3. Inaktivera implicit beviljande av för åtkomsttoken och ID-token.

Mer information finns i:

Uppdatera serverprojektet för en värdbaserad Blazor lösning

Följ riktlinjerna i föregående avsnitt:

Uppdatera Server projektet för en värdbaserad Blazor lösning som en ASP.NET Core-app enligt den allmänna vägledningen i den här artikeln.

Dessutom bör Server projekt som autentiserar användare till klientprogram Blazor WebAssembly med Microsoft Entra ID (ME-ID) eller B2C anta nya Microsoft Identity v2.0-paket:

För AAD:

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

För 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}" />

För föregående paketreferenser fastställer du paketversionerna för {VERSION} platshållare på NuGet.org:

Not

SDK för Server-projektet i en värdbaserad Blazor WebAssembly lösning förblir Microsoft.NET.Sdk.Web:

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

Mer information finns i:

Rensa och återskapa lösningen

När du har migrerat appen eller lösningen till .NET 5 rensar du och återskapar appen eller lösningen. Om det finns inkompatibiliteter mellan nya paketreferenser och cachelagrade paket:

  1. Rensa NuGet-paketcacheminnen genom att köra följande dotnet nuget locals kommando i ett kommandogränssnitt:

    dotnet nuget locals --clear all
    
  2. Rensa och återskapa appen eller lösningen.

Felsöka

Följ anvisningarna för Felsökning i slutet av det Blazor WebAssembly säkerhetsämne som gäller för din app.

Fristående Blazor WebAssembly appar:

Värdbaserade Blazor WebAssembly appar:

Obehörig klient för Microsoft Entra-ID (ME-ID)

När du har uppgraderat en Blazor WebAssembly app som använder AAD för autentisering kan du få följande fel vid återanropet till appen efter att användaren har loggat in med AAD:

info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] Auktoriseringen misslyckades. Dessa krav uppfylldes inte: DenyAnonymousAuthorizationRequirement: Kräver en autentiserad användare.

Inloggningsfel vid återuppringning från AAD

  • Fel: unauthorized_client
  • Beskrivning: AADB2C90058: The provided application is not configured to allow public clients.

Så här löser du felet:

  1. Gå till -appens manifest i Azure-portalen.
  2. Ange attributet allowPublicClient till null eller true.

Uppdatera en Blazor progressiv webbapplikation (PWA)

Lägg till följande objekt i PWA-appens projektfil:

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

Om projektets wwwroot/index.html (Blazor WebAssembly) eller Pages/_Host.cshtml (Blazor Server) innehåller ett formatmallselement <link> element för scoped.styles.css från en tidigare version av förhandsversionen 5.0 tar du bort taggen <link>:

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

Uppdatera Razor-klassbibliotek (RCL)

Migrera Razor klassbibliotek (RCL) för att dra nytta av nya API:er eller funktioner som introduceras som en del av ASP.NET Core 5.0.

Så här uppdaterar du en RCL som riktar sig till komponenter:

  1. Uppdatera följande egenskaper i projektfilen:

    <Project Sdk="Microsoft.NET.Sdk.Razor">
    
      <PropertyGroup>
    -     <TargetFramework>netstandard2.0</TargetFramework>
    -     <RazorLangVersion>3.0</RazorLangVersion>
    +     <TargetFramework>net5.0</TargetFramework>
      </PropertyGroup>
    
  2. Uppdatera andra paket till de senaste versionerna. De senaste versionerna finns på NuGet.org.

Uppdatera en RCL-riktad MVC genom att uppdatera följande egenskaper i projektfilen:

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

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

Uppdatera paketreferenser

Uppdatera varje Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.*och System.Net.Http.Json paketreferensens Version attribut till 5.0.0 eller senare. Till exempel:

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

Uppdatera Docker-avbildningar

För appar som använder Docker uppdaterar du Dockerfile-FROM-instruktioner och skript. Använd en basavbildning som innehåller ASP.NET Core 5.0-runtime. Överväg följande docker pull kommandoskillnad mellan ASP.NET Core 3.1 och 5.0:

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

Som en del av övergången till ".NET" som produktnamn flyttade Docker-avbildningarna från mcr.microsoft.com/dotnet/core-lagringsplatserna till mcr.microsoft.com/dotnet. För mer information, se dotnet/dotnet-docker#1939.

Modellbindningsändringar i ASP.NET Core MVC och Razor Pages

DateTime-värden är modellbundna som UTC-tider

I ASP.NET Core 3.1 och tidigare var DateTime värden modellbundna som lokal tid, där tidszonen fastställdes av servern. DateTime värden som är bundna från indataformatering (JSON) och DateTimeOffset värden var bundna som UTC-tidszoner.

I ASP.NET Core 5.0 och senare binder modellbindningen konsekvent DateTime värden med UTC-tidszonen.

Om du vill behålla det tidigare beteendet tar du bort DateTimeModelBinderProvider i Startup.ConfigureServices:

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

ComplexObjectModelBinderProvider \ ComplexObjectModelBinder ersätter ComplexTypeModelBinderProvider \ ComplexTypeModelBinder

För att lägga till stöd för modellbindning C# 9 posttyperär ComplexTypeModelBinderProvider:

  • Kommenterat som föråldrat.
  • Inte längre registrerad som standard.

Appar som förlitar sig på förekomsten av ComplexTypeModelBinderProvider i ModelBinderProviders-samlingen måste referera till den nya binder-providern:

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

UseDatabaseErrorPage föråldrad

Mallarna ASP.NET Core 3.1 som innehåller ett alternativ för enskilda användarkonton genererar ett anrop till UseDatabaseErrorPage. UseDatabaseErrorPage är nu föråldrad och bör ersättas med en kombination av AddDatabaseDeveloperPageExceptionFilter och UseMigrationsEndPoint, enligt följande kod:

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

Mer information finns i det här GitHub-ärendet.

ASP.NET Core Module (ANCM)

Om ASP.NET Core Module (ANCM) inte var en vald komponent när Visual Studio installerades eller om en tidigare version av ANCM installerades på systemet laddar du ned den senaste .NET Core Hosting Bundle Installer (direkt nedladdning) och kör installationsprogrammet. Mer information finns i Hosting Bundle.

Paketreferensändringar som påverkar vissa NuGet-paket

Med migreringen av vissa Microsoft.Extensions.* NuGet-paket från dotnet/extensions-lagringsplatsen till dotnet/runtime, enligt beskrivningen i Migrera dotnet/extensions-innehåll till dotnet/runtime och dotnet/aspnetcore (aspnet/Meddelanden #411)tillämpas paketändringar på några av de migrerade paketen. Dessa ändringar resulterar ofta i namnområdesändringar för .NET API.

Om du vill undersöka API:er ytterligare för ändringar i appnamnområdet vid migrering till 5.0 använder du .NET API-webbläsaren.

Migrera Microsoft.Identity. Web

Följande wiki-sidor förklarar hur du migrerar Microsoft.Identity. Webb från ASP.NET Core 3.1 till 5.0:

Följande handledningar förklarar migreringen också.

Granska icke-bakåtkompatibla ändringar

Information om icke-bakåtkompatibla ändringar från .NET Core 3.1 till .NET 5.0 finns i Icke-bakåtkompatibla ändringar för migrering från version 3.1 till 5.0. ASP.NET Core och Entity Framework Core ingår också i listan.