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
- Sada Visual Studio 2022 se sadou funkcí Vývoj pro ASP.NET a web
- Sada .NET 6.0 SDK
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
sjednocujeStartup.cs
jedenProgram.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ýchusing
řá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:
- ConfigureServices je nahrazena znakem
WebApplication.Services
. builder.Build()
vrátí nakonfigurovanou WebApplication proměnnouapp
. Configure je nahrazena voláními konfigurace pro stejné služby pomocíapp
.
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
aPrivacy.cshtml
odebraly se nepoužívanéusing
příkazy.RequestId
inError.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.json
appsettings.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ýjimkou Microsoft.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
ConfigureServices
Configure
.
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 Configure
služ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 UseRouting
UseEndpoints
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 životnostStartup
třídy.- Všechny další služby vložené do
Configure
metody musí být ručně vyřešenyProgram
třídou.
Rozdíly mezi modely hostování ASP.NET Core 5 a 6
- Ve vývojovém režimu je ve výchozím nastavení povolený middleware stránky výjimek vývojáře.
- Název aplikace má výchozí název sestavení vstupního bodu:
Assembly.GetEntryAssembly().GetName().FullName
. Při použití WebApplicationBuilder knihovny explicitně změňte název aplikace na sestavení knihovny, aby bylo možné zjistit část aplikace MVC. Podrobné pokyny najdete v části Změna kořenového adresáře obsahu, názvu aplikace a prostředí v tomto dokumentu. - Middleware směrování koncového bodu zabalí celý kanál middlewaru, takže není nutné explicitně volat
UseRouting
aniUseEndpoints
registrovat trasy.UseRouting
se dá i nadále použít k určení, kde se provádí porovnávání tras, aleUseRouting
není nutné je explicitně volat, pokud by se trasy měly shodovat na začátku kanálu middlewaru. - Kanál se vytvoří před spuštěnímIStartupFilter, a proto výjimky způsobené sestavením kanálu nejsou viditelné pro
IStartupFilter
řetěz volání. - Některé nástroje, jako jsou migrace EF, slouží
Program.CreateHostBuilder
pro přístup k aplikaciIServiceProvider
, aby se spustila vlastní logika v kontextu aplikace. Tyto nástroje byly aktualizovány tak, aby používaly novou techniku spouštění vlastní logiky v kontextu aplikace. Entity Framework Migrations je příkladem nástroje, který tímto způsobem používáProgram.CreateHostBuilder
. Pracujeme na tom, abychom měli jistotu, že se nástroje aktualizují tak, aby používaly nový model. Startup
Na rozdíl od třídy minimální hostitel při vytváření instance poskytovatele služeb automaticky nenakonfiguruje obor DI. Pro kontexty, kde je obor požadován, je nutné vyvolat IServiceScope pomocí IServiceScopeFactory.CreateScope vytvořit instanci nového oboru. Další informace najdete v tématu řešení služby při spuštění aplikace.- Po vytvoření souboru není možné změnit žádná nastavení hostitele, jako je název aplikace, prostředí nebo kořen obsahu.WebApplicationBuilder Podrobné pokyny ke změně nastavení hostitele naleznete v tématu Přizpůsobení
IHostBuilder
neboIWebHostBuilder
. Následující zvýrazněná rozhraní API vyvolá výjimku:
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 zWebApplicationBuilder.Host
neboWebApplicationBuilder.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 aIServiceCollection
IConfiguration
. Následující příklad přidáService1
pouze jakoIService
: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 WebApplicationBuilder Services
, Host
a 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
, IWebHostBuilder
IApplicationBuilder
, 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
nanet6.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
aTestServer
pořád pracujete?Ano.
WebApplicationFactory<TEntryPoint>
je způsob, jak otestovat nový model hostování. Příklad naleznete v tématu Test sWebApplicationFactory
neboTestServer
.
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 JSON.
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 aRazorCompile
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.dll
které 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 jsouinternal 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 do 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í:
- Identity: Změna výchozí verze uživatelského rozhraní bootstrap
- Zásadní změny migrace z verze 5.0 na 6.0: Zahrnuje ASP.NET Core a Entity Framework Core.
- Oznámení v úložišti GitHub (aspnet/Announcements,
6.0.0
label): Obsahuje informace o způsobujících porušeních a nefunkčních informacích.
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#:
- Odkazové typy s možnou hodnotou null
- Odkazové typy s možnou hodnotou null (referenční dokumentace jazyka C#)
- Naučte se řešit upozornění s možnou hodnotou null.
- Aktualizace základu kódu s odkazovými typy s možnou hodnotou null za účelem zlepšení upozornění diagnostiky s hodnotou null
- Atributy statické analýzy stavu null
- ! (null-forgiving) – operátor (referenční dokumentace 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