Migrace z ASP.NET Core 5.0 na 6.0

Tento článek vysvětluje, jak aktualizovat existující projekt ASP.NET Core 5.0 na ASP.NET Core 6.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 SDK v global.json

Pokud se spoléháte na global.json soubor určený pro konkrétní verzi sady .NET SDK, aktualizujte version vlastnost na nainstalovanou verzi sady .NET 6.0 SDK. Příklad:

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

Aktualizace cílové architektury

Aktualizujte moniker cílového rozhraní (TFM) souboru projektu nanet6.0:

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

  <PropertyGroup>
-    <TargetFramework>net5.0</TargetFramework>
+    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>

</Project>

Aktualizace odkazů na balíčky

V souboru projektu aktualizujte atribut odkazu Version na každý Microsoft.AspNetCore.* balíček Microsoft.Extensions.* na verzi 6.0.0 nebo novější. Příklad:

<ItemGroup>
-    <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="5.0.3" />
-    <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0" />
+    <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="6.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="6.0.0" />
</ItemGroup>

Nový model hostování

Nový model hostování .NET 6 pro aplikace ASP.NET Core vyžaduje jenom jeden soubor a několik řádků kódu. Aplikace migrující na verzi 6.0 nepotřebují nový minimální model hostování. Další informace najdete v tématu Aplikace, které migrují na verzi 6.0, nemusí používat nový minimální model hostování v následující části.

Následující kód z prázdné šablony ASP.NET Core vytvoří aplikaci pomocí nového minimálního modelu hostování:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Minimální model hostování:

  • Výrazně snižuje počet souborů a řádků kódu potřebných k vytvoření aplikace. Je potřeba jenom jeden soubor se čtyřmi řádky kódu.
  • Sjednocuje a Program.cs sjednocuje Startup.cs jeden Program.cs soubor.
  • Pomocí příkazů nejvyšší úrovně minimalizujete kód potřebný pro aplikaci.
  • Používá globální using direktivy k odstranění nebo minimalizaci počtu požadovaných using řádků příkazů .

Následující kód zobrazí Startup.cs soubory ze Program.cs šablony webové aplikace ASP.NET Core 5 (Razor Pages) s odebranými nepoužívanými using příkazy:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
// Unused usings removed.

namespace WebAppRPv5
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddRazorPages();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapRazorPages();
            });
        }
    }
}
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
// Unused usings removed.

namespace WebAppRPv5
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}

V ASP.NET Core 6 se předchozí kód nahrazuje tímto:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

Předchozí ukázka ASP.NET Core 6 ukazuje, jak:

Podrobné příklady migrace kódu ASP.NET Core 5 Startup na ASP.NET Core 6 pomocí minimálního modelu hostování najdete dále v tomto dokumentu.

U ostatních souborů vygenerovaných pro šablonu webové aplikace existuje několik změn:

  • Index.cshtml a Privacy.cshtml odebraly se nepoužívané using příkazy.
  • RequestIdin Error.cshtml je deklarován jako odkazový typ s možnou hodnotou null (NRT):
- public string RequestId { get; set; }
+ public string? RequestId { get; set; }
  • Výchozí hodnoty na úrovni protokolu se změnily a appsettings.jsonappsettings.Development.json:
- "Microsoft": "Warning",
- "Microsoft.Hosting.Lifetime": "Information"
+ "Microsoft.AspNetCore": "Warning"

V předchozím kódu šablony "Microsoft": "Warning" ASP.NET Core byl změněn na "Microsoft.AspNetCore": "Warning". Výsledkem této změny je protokolování všech informačních zpráv z Microsoft oboru názvů s výjimkouMicrosoft.AspNetCore. Teď se například Microsoft.EntityFrameworkCore protokoluje na informační úrovni.

Další podrobnosti o novém modelu hostování najdete v části Nejčastější dotazy . Další informace o přijetí nrT a analýzy stavu null-state kompilátoru .NET naleznete v části Statické analýzy s možnou hodnotou null (NRT) a kompilátoru .NET s nulovým stavem.

Aplikace migrující na verzi 6.0 nebo novější nemusí používat nový minimální model hostování.

Použití Startup a obecný hostitel používaný šablonami ASP.NET Core 3.1 a 5.0 je plně podporován.

Použití startupu s novým minimálním modelem hostování

aplikace ASP.NET Core 3.1 a 5.0 můžou používat kód Startup s novým minimálním modelem hostování. Použití Startup s minimálním modelem hostování má následující výhody:

  • Ke volání Startup třídy se nepoužívá žádná skrytá reflexe.
  • Asynchronní kód lze napsat, protože vývojář řídí volání Startup.
  • Kód lze napsat, že prolíná a ConfigureServicesConfigure.

Jedním z menších omezení při použití Startup kódu s novým minimálním modelem hostování je, že vložení závislosti do Configureslužby Program.cs musí být ručně vyřešeno.

Představte si následující kód vygenerovaný šablonou ASP.NET Core 3.1 nebo 5.0 Razor Pages:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}
public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseRouting();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
        });
    }
}

Předchozí kód migrovaný na nový minimální model hostování:

using Microsoft.AspNetCore.Builder;

var builder = WebApplication.CreateBuilder(args);

var startup = new Startup(builder.Configuration);

startup.ConfigureServices(builder.Services);

var app = builder.Build();

startup.Configure(app, app.Environment);

app.Run();
public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (!env.IsDevelopment())
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseRouting();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
        });
    }
}

V předchozím kódu se blok odebere, if (env.IsDevelopment()) protože ve vývojovém režimu je ve výchozím nastavení povolený middleware stránky výjimky vývojáře. Další informace najdete v tématu Rozdíly mezi modely hostování ASP.NET Core 5 a 6 v další části.

Při použití kontejneru injektáže vlastních závislostí (DI) přidejte následující zvýrazněný kód:

using Autofac;
using Autofac.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;

var builder = WebApplication.CreateBuilder(args);

var startup = new Startup(builder.Configuration);

startup.ConfigureServices(builder.Services);

// Using a custom DI container.
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
builder.Host.ConfigureContainer<ContainerBuilder>(startup.ConfigureContainer);

var app = builder.Build();

startup.Configure(app, app.Environment);

app.Run();
using Autofac;
public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
    }

    //  Using a custom DI container
    public void ConfigureContainer(ContainerBuilder builder)
    {
        // Configure custom container.
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (!env.IsDevelopment())
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseRouting();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
        });
    }
}

Při použití minimálního modelu hostování zabalí middleware směrování koncového bodu celý kanál middlewaru, takže není nutné explicitně volat UseRouting ani UseEndpoints registrovat trasy. UseRouting se dá i nadále použít k určení, kde se provádí porovnávání tras, ale UseRouting není nutné je explicitně volat, pokud by se trasy měly shodovat na začátku kanálu middlewaru.

V následujícím kódu jsou volání a UseRoutingUseEndpoints jsou odebrány z Startup. MapRazorPages je volána v Program.cs:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (!env.IsDevelopment())
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        //app.UseRouting();

        //app.UseEndpoints(endpoints =>
        //{
        //    endpoints.MapRazorPages();
        //});
    }
}
using Microsoft.AspNetCore.Builder;

var builder = WebApplication.CreateBuilder(args);

var startup = new Startup(builder.Configuration);

startup.ConfigureServices(builder.Services);

var app = builder.Build();

startup.Configure(app, app.Environment);

app.MapRazorPages();

app.Run();

Při použití Startup s novým minimálním modelem hostování mějte na paměti následující rozdíl:

  • Program.cs řídí vytváření instancí a životnost Startup třídy.
  • Všechny další služby vložené do Configure metody musí být ručně vyřešeny Program třídou.

Rozdíly mezi modely hostování ASP.NET Core 5 a 6

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

// WebHost

try
{
    builder.WebHost.UseContentRoot(Directory.GetCurrentDirectory());
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

try
{
    builder.WebHost.UseEnvironment(Environments.Staging);
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

try
{
    builder.WebHost.UseSetting(WebHostDefaults.ApplicationKey, "ApplicationName2");
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

try
{
    builder.WebHost.UseSetting(WebHostDefaults.ContentRootKey, Directory.GetCurrentDirectory());
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

try
{
    builder.WebHost.UseSetting(WebHostDefaults.EnvironmentKey, Environments.Staging);
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

// Host
try
{
    builder.Host.UseEnvironment(Environments.Staging);
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

try
{
    // TODO: This does not throw
    builder.Host.UseContentRoot(Directory.GetCurrentDirectory());
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();
  • Třídu Startup nelze použít z WebApplicationBuilder.Host nebo WebApplicationBuilder.WebHost. Následující zvýrazněný kód vyvolá výjimku:

    var builder = WebApplication.CreateBuilder(args);
    
    try
    {
        builder.Host.ConfigureWebHostDefaults(webHostBuilder =>
        {
            webHostBuilder.UseStartup<Startup>();
        });
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
        throw;    
    }
    
    builder.Services.AddRazorPages();
    
    var app = builder.Build();
    
    var builder = WebApplication.CreateBuilder(args);
    
    try
    {
        builder.WebHost.UseStartup<Startup>();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
        throw;    
    }
    
    builder.Services.AddRazorPages();
    
    var app = builder.Build();
    
  • Implementace IHostBuilder pro WebApplicationBuilder (WebApplicationBuilder.Host), neodkazuje provádění ConfigureServicesConfigureAppConfiguration, ani ConfigureHostConfiguration metody. Odložení provádění umožňuje kódu sledovat WebApplicationBuilder změny provedené v a IServiceCollectionIConfiguration. Následující příklad přidá Service1 pouze jako IService:

    using Microsoft.Extensions.DependencyInjection.Extensions;
    
    var builder = WebApplication.CreateBuilder(args);
    
    builder.Host.ConfigureServices(services =>
    {
        services.TryAddSingleton<IService, Service1>();
    });
    
    builder.Services.TryAddSingleton<IService, Service2>();
    
    var app = builder.Build();
    
    // Displays Service1 only.
    Console.WriteLine(app.Services.GetRequiredService<IService>());
    
    app.Run();
    
    class Service1 : IService
    {
    }
    
    class Service2 : IService
    {
    }
    
    interface IService
    {
    }
    

V předchozím kódu se zpětné volání volá jako vložené místo builder.Host.ConfigureServices odložení, dokud builder.Build se nevolá. To znamená, že Service1 se přidá do IServiceCollection dříve Service2 a výsledky Service1 budou vyřešeny pro IService.

Vytváření knihoven pro ASP.NET Core 6

Stávající ekosystém .NET vytvořil rozšiřitelnost kolem IServiceCollection, IHostBuildera IWebHostBuilder. Tyto vlastnosti jsou k dispozici jako WebApplicationBuilderServices, Hosta WebHost.

WebApplication implementuje jak Microsoft.AspNetCore.Builder.IApplicationBuilder a Microsoft.AspNetCore.Routing.IEndpointRouteBuilder.

Očekáváme, že autoři knihoven budou pokračovat v cílení IHostBuilder, IWebHostBuilderIApplicationBuilder, a IEndpointRouteBuilder při sestavování ASP.NET komponent specifických pro jádra. Tím se zajistí, že váš middleware, obslužná rutina trasy nebo jiné body rozšiřitelnosti budou dál fungovat napříč různými modely hostování.

Nejčastější dotazy

  • Je nový minimální model hostování méně schopný?

    Ne. Nový model hostování je funkčně ekvivalentní pro 98 % scénářů podporovaných IHostBuilder a .IWebHostBuilder Existují některé pokročilé scénáře, které vyžadují konkrétní alternativní řešení IHostBuilder, ale očekáváme, že jsou velmi vzácné.

  • Je obecný model hostování zastaralý?

    Ne. Obecný model hostování je alternativní model, který je trvale podporovaný. Obecný hostitel je základem nového modelu hostování a je stále primárním způsobem hostování aplikací založených na pracovních procesech.

  • Musím migrovat na nový model hostování?

    Ne. Nový model hostování je upřednostňovaným způsobem hostování nových aplikací pomocí .NET 6 a novějšího, ale v existujících aplikacích nemusíte měnit rozložení projektu. To znamená, že aplikace mohou upgradovat z .NET 5 na .NET 6 změnou cílové architektury v souboru projektu z net5.0 na net6.0. Další informace najdete v části Aktualizace cílové architektury v tomto článku. Doporučujeme ale migrovat aplikace na nový model hostování, aby využívaly nové funkce dostupné pouze pro nový model hostování.

  • Musím použít příkazy nejvyšší úrovně?

    Ne. Nové šablony projektů používají příkazy nejvyšší úrovně, ale nová rozhraní API pro hostování je možné použít v libovolné aplikaci .NET 6 k hostování webového serveru nebo webové aplikace.

  • Kde umístím stav, který byl uložen jako pole v mé Program třídě Startup ?

    Důrazně doporučujeme použít injektáž závislostí (DI) k toku stavu v aplikacích ASP.NET Core.

    Existují dva přístupy k ukládání stavu mimo DI:

    • Uložte stav v jiné třídě. Uložení ve třídě předpokládá statický stav, ke kterému je možné přistupovat odkudkoli v aplikaci.

    • Program K uložení stavu použijte třídu vygenerovanou příkazy nejvyšší úrovně. Použití Program k ukládání stavu je sémantický přístup:

      var builder = WebApplication.CreateBuilder(args);
      
      ConfigurationValue = builder.Configuration["SomeKey"] ?? "Hello";
      
      var app = builder.Build();
      
      app.MapGet("/", () => ConfigurationValue);
      
      app.Run();
      
      partial class Program
      {
          public static string? ConfigurationValue { get; private set; }
      }
      
  • Co když jsem používal(a) vlastní kontejner injektáže závislostí?

    Podporují se vlastní kontejnery DI. Příklad najdete v kontejneru injektáže vlastních závislostí (DI).

  • Pracujte WebApplicationFactory a TestServer pořád pracujete?

    Ano. WebApplicationFactory<TEntryPoint> je způsob, jak otestovat nový model hostování. Příklad naleznete v tématu Test s WebApplicationFactory nebo TestServer.

Blazor

Po provedení pokynů uvedených výše v tomto článku aktualizujte aplikaci na verzi 6.0, pomocí odkazů v části Co je nového v ASP.NET Core 6.0.

Pokud chcete přijmout všechny nové funkce 6.0 pro Blazor aplikace, doporučujeme následující postup:

  • Vytvořte nový projekt 6.0 Blazor z jedné ze Blazor šablon projektu. Další informace naleznete v tématu Nástroje pro ASP.NET Core Blazor.
  • Přesuňte komponenty a kód aplikace do aplikace verze 6.0 a upravte nové funkce verze 6.0.

Migrace projektů SPA

Migrace aplikací Angular z rozšíření SPA

Podívejte se na tento problém na GitHubu.

Migrace aplikací React z rozšíření SPA

Podívejte se na problém s migrací aplikací React z rozšíření Spa v tomto problému na GitHubu.

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 6.0. Představte si následující docker pull rozdíl mezi ASP.NET Core 5.0 a 6.0:

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

Podívejte se na problém GitHubu způsobující chybu: Výchozí formát protokolovacího nástroje konzoly nastavený na JSZAPNUTO.

Změny sady ASP.NET Core Razor SDK

Razor Kompilátor teď využívá novou funkci generátorů zdrojů k vygenerování zkompilovaných souborů C# ze Razor zobrazení a stránek v projektu. V předchozích verzích:

  • Kompilace spoléhala na vygenerovaný RazorGenerate kód a RazorCompile cíle. Tyto cíle už nejsou platné. V .NET 6 je generování kódu i kompilace podporováno jediným voláním kompilátoru. RazorComponentGenerateDependsOn je stále podporována, aby bylo možné určit závislosti, které jsou potřeba před spuštěním sestavení.
  • Vygenerovalo se samostatné Razor sestavení, AppName.Views.dllkteré obsahovalo kompilované typy zobrazení v aplikaci. Toto chování je zastaralé a vytvoří se jedno sestavení AppName.dll , které obsahuje jak typy aplikací, tak vygenerovaná zobrazení.
  • Typy AppName.Views.dll aplikací byly veřejné. V .NET 6 jsou typy aplikací, ale jsou internal sealed.AppName.dll Aplikace, které provádějí zjišťování AppName.Views.dll typů, nebudou moct provádět zjišťování typu .AppName.dll Následující příklad ukazuje změnu rozhraní API:
- public class Views_Home_Index : global::Microsoft.AspNetCore.Mvc.Razor.RazorPage<dynamic>
+ internal sealed class Views_Home_Index : global::Microsoft.AspNetCore.Mvc.Razor.RazorPage<dynamic>

Proveďte následující změny:

  • Následující vlastnosti již neplatí pro model kompilace s jedním krokem.
    • RazorTargetAssemblyAttribute
    • RazorTargetName
    • EnableDefaultRazorTargetAssemblyInfoAttributes
    • UseRazorBuildServer
    • GenerateRazorTargetAssemblyInfo
    • GenerateMvcApplicationPartsAssemblyAttributes

Další informace naleznete v tématu Razor Kompilátor již nevytyčuje sestavení Views.

Šablony projektů používají Duende Identity Server

Šablony projektů teď používají Duende Identity Server. Pokyny k migraci najdete v tématu IdentityServer4 v4.1 na Duende IdentityServer v5.

Důležité

Duende Identity Server je opensourcový produkt s reciproční licenční smlouvou. Pokud plánujete používat Duende Identity Server v produkčním prostředí, může být nutné získat komerční licenci od společnosti Duende Software a zaplatit licenční poplatek. Další informace naleznete v tématu Duende Software: Licence.

Informace o tom, jak používat Microsoft Azure Active Directory pro ASP.NET CoreIdentity, najdete v tématu Identity (úložiště dotnet/aspnetcore Na GitHubu).

Přidejte vlastnost pojmenovanou Keys ke každému DbSet<Key>IdentityDbContext, aby splňovala nový požadavek z aktualizované verze IPersistedGrantDbContext. Klíče jsou vyžadovány jako součást smlouvy s úložišti Duende Identity Serveru.

public DbSet<Key> Keys { get; set; }

Poznámka:

Pro Server Duende Identity je nutné znovu vytvořit existující migrace.

Ukázky kódu migrované na ASP.NET Core 6.0

Ukázky kódu migrované na nový minimální model hostování ve verzi 6.0

Kontrola zásadních změn

Projděte si následující zdroje informací:

Referenční typy s možnou hodnotou null (NRT) a statická analýza stavu null kompilátoru .NET

ASP.NET šablony projektu Core používají odkazové typy s možnou hodnotou null (NRT) a kompilátor .NET provádí statickou analýzu stavu null. Tyto funkce byly vydány s C# 8 a jsou ve výchozím nastavení povolené pro aplikace generované pomocí ASP.NET Core 6.0 (C# 10) nebo novější.

Upozornění statické analýzy stavu null kompilátoru .NET můžou sloužit jako vodítko pro aktualizaci příkladu dokumentace nebo ukázkové aplikace místně nebo ignorování. Statickou analýzu stavu null je možné zakázat nastavením Nullable v disable souboru projektu aplikace, který doporučujeme pouze pro příklady dokumentace a ukázkové aplikace, pokud upozornění kompilátoru ruší při učení o .NET. Nedoporučujeme zakázat kontrolu stavu null v produkčních projektech.

Další informace o NRT, vlastnosti MSBuild Nullable a aktualizaci aplikací (včetně #pragma pokynů) najdete v následující dokumentaci v dokumentaci jazyka C#:

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ěna názvu aplikace

V .NET 6 normalizuje kořenovou cestu k obsahu tak, WebApplicationBuilder aby končila na .DirectorySeparatorChar Většina aplikací migrovaných z HostBuilder nebo WebHostBuilder nebude mít stejný název aplikace, protože nejsou normalizované. Další informace najdete v tématu SetApplicationName

Další materiály