Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln beskriver hur du uppdaterar en befintlig ASP.NET Core i .NET 5-projektet till .NET 6. Anvisningar om hur du migrerar från ASP.NET Core 3.1 till .NET 6 finns i Migrera från ASP.NET Core 3.1 till .NET 6.
Förutsättningar
- Visual Studio 2022 med arbetsuppgiften ASP.NET och webbutveckling.
- .NET 6 SDK
Uppdatera .NET 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 SDK-version uppdaterar version du egenskapen till den .NET 6 SDK-version som är installerad. Till exempel:
{
"sdk": {
- "version": "5.0.100"
+ "version": "6.0.100"
}
}
Uppdatera målramverket
Uppdatera projektfilens Target Framework Moniker (TFM) till net6.0:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>net5.0</TargetFramework>
+ <TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
</Project>
Uppdatera paketreferenser
I projektfilen uppdaterar du attributet för varje Microsoft.AspNetCore.*Microsoft.Extensions.* paketreferens Version till 6.0.0 eller senare. Till exempel:
<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>
Ny värdmodell
Den nya .NET 6 minimala värdmodellen för ASP.NET Core-appar kräver bara en fil och några rader kod. Appar som migrerar till .NET 6 behöver inte använda den nya minimala värdmodellen. Mer information finns i Appar som migrerar till .NET 6 behöver inte använda den nya minimala värdmodellen i följande avsnitt.
Följande kod från den tomma mallen ASP.NET Core skapar en app med den nya minimala värdmodellen:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
Den minimala värdmodellen:
- Minskar avsevärt antalet filer och rader med kod som krävs för att skapa en app. Endast en fil behövs med fyra kodrader.
- Förenar
Startup.csochProgram.cstill en endaProgram.csfil. - Använder toppnivåinstruktioner för att minimera den kod som krävs för en app.
- Använder globala
usingdirektiv för att eliminera eller minimera antalet instruktionsraderusingsom krävs.
Följande kod visar Startup.cs och Program.cs filerna från en .NET 5 Web App-mall (Razor sidor) med oanvända using uttryck borttagna:
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>();
});
}
}
I ASP.NET Core i .NET 6 ersätts föregående kod med följande:
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();
Föregående ASP.NET Core i .NET 6-exemplet visar hur:
-
ConfigureServices ersätts med
WebApplication.Services. -
builder.Build()returnerar en konfigurerad WebApplication till variabelnapp. Configure ersätts med konfigurationsanrop till samma tjänster med hjälp avapp.
Detaljerade exempel på hur du migrerar ASP.NET Core i .NET 5-kod Startup till .NET 6 med hjälp av den minimala värdmodellen finns senare i det här dokumentet.
Det finns några ändringar i de andra filerna som genereras för webbappmallen:
-
Index.cshtmlochPrivacy.cshtmlhar fått de oanvändausing-instruktionerna borttagna. -
RequestIdiError.cshtmldeklareras som en nullbar referenstyp (NRT):
- public string RequestId { get; set; }
+ public string? RequestId { get; set; }
- Standardvärden för loggnivå har ändrats i
appsettings.jsonochappsettings.Development.json:
- "Microsoft": "Warning",
- "Microsoft.Hosting.Lifetime": "Information"
+ "Microsoft.AspNetCore": "Warning"
I föregående ASP.NET Core-mallkod "Microsoft": "Warning" har ändrats till "Microsoft.AspNetCore": "Warning". Den här ändringen resulterar i loggning av alla informationsmeddelanden från Microsoft namnområdet utomMicrosoft.AspNetCore. Till exempel loggas Microsoft.EntityFrameworkCore nu på informationsnivå.
Mer information om den nya värdmodellen finns i avsnittet Vanliga frågor och svar . Mer information om införandet av nollbara referenstyper (NRT) och .NET-kompilatorns null-tillståndsanalys finns i avsnittet Nullable reference types (NRTs) och .NET kompilator null-state static analysis.
Appar som migrerar till eller använder 6.0 eller senare behöver inte använda den nya minimala värdmodellen
Användning Startup och den generiska värd som används av mallarna ASP.NET Core 3.1 och 5.0 stöds fullt ut.
Använda Start med den nya minimala värdmodellen
ASP.NET Core 3.1- och 5.0-appar kan använda sin Startup kod med den nya minimala värdmodellen. Användning av Startup med den minimala värdmodellen har följande fördelar:
- Ingen dold reflektion används för att anropa
Startupklassen. - Asynkron kod kan skrivas eftersom utvecklaren styr anropet till
Startup. - Kod kan skrivas som växlar mellan
ConfigureServicesochConfigure.
En mindre begränsning i att använda Startup kod med den nya minimala värdmodellen är att för att mata in ett beroende i Configuremåste tjänsten i Program.cs matchas manuellt.
Överväg följande kod som genereras av mallen ASP.NET Core 3.1 eller 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();
});
}
}
Föregående kod migrerades till den nya minimala värdmodellen:
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();
});
}
}
I föregående kod if (env.IsDevelopment()) tas blocket bort eftersom mellanprogrammet för utvecklarens undantagssida är aktiverat som standard i utvecklingsläge. Mer information finns i Skillnader mellan ASP.NET Core i .NET 5- och .NET 6-värdmodeller i nästa avsnitt.
När du använder en container för anpassad beroendeinmatning (DI) lägger du till följande markerade kod:
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();
});
}
}
När du använder den minimala värdmodellen omsluter slutpunktshanteringsmellanprogrammet hela pipelinen för mellanprogram. Du behöver därför inte ha explicita anrop till UseRouting eller UseEndpoints för att registrera vägar.
UseRouting kan fortfarande användas för att ange var routningsmatchning ska ske, men UseRouting behöver inte anropas uttryckligen om vägar ska matchas i början av pipelinen för mellanprogram.
I följande kod tas anropen till UseRouting och UseEndpoints bort från Startup.
MapRazorPages anropas i 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();
Tänk på följande skillnad när du använder Startup med den nya minimala värdmodellen:
-
Program.csstyr instansiering och livslängd förStartupklassen. - Eventuella ytterligare tjänster som matas in i
Configuremetoden måste lösas manuellt avProgramklassen.
Skillnader mellan värdmodeller i ASP.NET Core i .NET 5 och .NET 6
- I utvecklingsläge är mellanprogrammet för utvecklarens undantagssida aktiverat som standard.
- Appnamnet är som standard startpunktssammansättningens namn:
Assembly.GetEntryAssembly().GetName().FullName. När du använder WebApplicationBuilder i ett bibliotek ändrar du uttryckligen appnamnet till bibliotekets sammansättning så att MVC:s programdelsidentifiering kan fungera. Mer information finns i Ändra innehållsrot, appnamn och miljö i det här dokumentet. - Slutpunktsdirigeringsmellanprogrammet omsluter hela pipelinen för mellanprogram, därför behöver du inte ha explicita anrop till
UseRoutingellerUseEndpointsför att registrera vägar.UseRoutingkan fortfarande användas för att ange var routningsmatchning ska ske, menUseRoutingbehöver inte anropas uttryckligen om vägar ska matchas i början av pipelinen för mellanprogram. -
Pipelinen skapas innan några IStartupFilter körningar, därför visas inte undantag som orsakas när pipelinen skapas för anropskedjan
IStartupFilter. - Vissa verktyg, som EF-migreringar, använder
Program.CreateHostBuilderför att komma åt appensIServiceProvideroch köra anpassad logik i appens kontext. Dessa verktyg har uppdaterats för att använda en ny teknik för att köra anpassad logik i appens kontext. Entity Framework Migrations är ett exempel på ett verktyg som använderProgram.CreateHostBuilderpå det här sättet. Vi arbetar med att se till att verktygen uppdateras för att använda den nya modellen. - Till skillnad från
Startup-klassen konfigurerar den minimala värden inte automatiskt något DI-omfång när en tjänstleverantör instansieras. För kontexter där ett omfång krävs är det nödvändigt att anropa IServiceScope med IServiceScopeFactory.CreateScope för att instansiera ett nytt omfång. Mer information finns i hur du löser en tjänst vid appstart. - Det går inte att ändra några värdinställningar, till exempel appnamn, miljö eller innehållsroten efter skapandet av WebApplicationBuilder. Detaljerade anvisningar om hur du ändrar värdinställningar finns i Anpassa
IHostBuilderellerIWebHostBuilder. Följande markerade API:er utlöser ett undantag:
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();
Klassen
Startupkan inte användas frånWebApplicationBuilder.HostellerWebApplicationBuilder.WebHost. Följande markerade kod genererar ett undantag: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();Implementeringen IHostBuilder på WebApplicationBuilder (
WebApplicationBuilder.Host) skjuter inte upp körningen av metoderna ConfigureServices, ConfigureAppConfiguration eller ConfigureHostConfiguration. Om körningen inte skjuts upp kan kod med hjälp av WebApplicationBuilder observera ändringar som gjorts iIServiceCollectionochIConfiguration. Följande exempel lägger bara tillService1som :IServiceusing 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 { }
I föregående kod kallas återanropet builder.Host.ConfigureServices direkt i stället för att skjutas upp tills builder.Build anropas. Det innebär att Service1 läggs till i IServiceCollection före Service2 och resulterar i att Service1 löses för IService.
Skapa bibliotek för ASP.NET Core i .NET 6
Det befintliga .NET-ekosystemet skapade utökningsbarhet kring IServiceCollection, IHostBuilderoch IWebHostBuilder. Dessa egenskaper är tillgängliga som WebApplicationBuilderServices, Hostoch WebHost.
WebApplication implementerar både Microsoft.AspNetCore.Builder.IApplicationBuilder och Microsoft.AspNetCore.Routing.IEndpointRouteBuilder.
Vi förväntar oss att biblioteksförfattare fortsätter att rikta in sig på IHostBuilder, IWebHostBuilder, IApplicationBuilderoch IEndpointRouteBuilder när de skapar ASP.NET Core-specifika komponenter. Detta säkerställer att mellanprogram, routningshanterare eller andra utökningspunkter fortsätter att fungera i olika värdmodeller.
Vanliga frågor (FAQ)
Är den nya minimala värdmodellen mindre kapabel?
Nej. Den nya värdmodellen är funktionellt likvärdig för 98% scenarier som stöds av
IHostBuilderochIWebHostBuilder. Det finns vissa avancerade scenarier som kräver specifika lösningar påIHostBuilder, men vi förväntar oss att de är extremt sällsynta.Är den allmänna värdmodellen inaktuell?
Nej. Den allmänna värdmodellen är en alternativ modell som stöds på obestämd tid. Den generiska värden ligger till grund för den nya värdmodellen och är fortfarande det primära sättet att vara värd för arbetsbaserade program.
Måste jag migrera till den nya värdmodellen?
Nej. Den nya värdmodellen är det bästa sättet att vara värd för nya appar med hjälp av .NET 6 eller senare, men du tvingas inte ändra projektlayouten i befintliga appar. Det innebär att appar kan uppgradera från .NET 5 till .NET 6 genom att ändra målramverket i projektfilen från
net5.0tillnet6.0. Mer information finns i avsnittet Uppdatera målramverket i den här artikeln. Vi rekommenderar dock att appar migreras till den nya värdmodellen för att dra nytta av nya funktioner som endast är tillgängliga för den nya värdmodellen.Måste jag använda toppnivåinstruktioner?
Nej. De nya projektmallarna använder alla toppnivåinstruktioner, men de nya värd-API:erna kan användas i valfri .NET 6-app som värd för en webbserver eller webbapp.
Var placerar jag tillstånd som lagrats som fält i min
ProgramellerStartupklassen?Vi rekommenderar starkt att du använder beroendeinjektion (DI) för att hantera tillstånd i ASP.NET Core-appar.
Det finns två sätt att lagra tillstånd utanför DI:
Lagra tillståndet i en annan klass. Lagring i en klass förutsätter ett statiskt tillstånd som kan nås var som helst i appen.
Använd klassen
Programsom genereras av toppnivåinstruktioner för att lagra tillstånd. Att användaProgramför att lagra tillstånd är den semantiska metoden: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; } }
Vad händer om jag använder en anpassad beroendeinmatningscontainer?
Anpassade DI-containrar stöds. För ett exempel, se Anpassad dependency injection (DI)-container.
Fungerar
WebApplicationFactoryochTestServerfungerar fortfarande?Ja.
WebApplicationFactory<TEntryPoint>är sättet att testa den nya värdmodellen. Ett exempel finns i Testa medWebApplicationFactoryellerTestServer.
Blazor
När du har följt riktlinjerna tidigare i den här artikeln för att uppdatera en app till .NET 6 kan du använda specifika funktioner genom att följa länkarna i Nyheter i ASP.NET Core i .NET 6.
Om du vill använda alla nya 6.0-funktioner för Blazor appar rekommenderar vi följande process:
- Skapa ett nytt 6.0-projekt Blazor från en av Blazor projektmallarna. Mer information finns i Verktyg för ASP.NET Core Blazor.
- Flytta appens komponenter och kod till 6.0-appen och gör ändringar för att implementera de nya .NET 6-funktionerna.
Migrera SPA-projekt
Migrera Angular-appar från SPA-tillägg
Migrera React-appar från SPA-tillägg
Se Migrera React-applikationer från SPA-tillägg i det här GitHub-ärendet
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 i körmiljö för .NET 6. Överväg följande docker pull kommandoskillnad mellan ASP.NET Core i .NET 5 och .NET 6:
- docker pull mcr.microsoft.com/dotnet/aspnet:5.0
+ docker pull mcr.microsoft.com/dotnet/aspnet:6.0
Se GitHub-ärende (Brytande ändring: Standardformat för konsollogger inställt på JSON).
Ändringar i ASP.NET Core Razor SDK
Kompilatorn Razor använder nu den nya källgeneratorfunktionen för att generera kompilerade C#-filer från vyerna Razor och sidorna i ett projekt. I tidigare versioner:
- Kompileringen förlitade sig på målen
RazorGenerateochRazorCompileför att skapa den genererade koden. Dessa mål är inte längre giltiga. I .NET 6 stöds både kodgenerering och kompilering av ett enda anrop till kompilatorn.RazorComponentGenerateDependsOnstöds fortfarande för att ange beroenden som krävs innan bygget körs. - En separat Razor sammansättning,
AppName.Views.dll, genererades som innehöll de kompilerade vytyperna i ett program. Det här beteendet är inaktuellt och en enskild sammansättningAppName.dllskapas som innehåller både apptyperna och de genererade vyerna. - Apptyperna i
AppName.Views.dllvar offentliga. I .NET 6 finns apptyperna iAppName.dllmen ärinternal sealed. Appar som gör typidentifiering påAppName.Views.dllkan inte identifiera typ påAppName.dll. Följande visar API-ändringen:
- 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>
Gör följande ändringar:
- Följande egenskaper gäller inte längre för kompileringsmodellen i ett steg.
RazorTargetAssemblyAttributeRazorTargetNameEnableDefaultRazorTargetAssemblyInfoAttributesUseRazorBuildServerGenerateRazorTargetAssemblyInfoGenerateMvcApplicationPartsAssemblyAttributes
Mer information finns i Razor kompilatorn skapar inte längre en views-sammansättning.
Projektmallar använder Duende Identity Server
Projektmallar använder nu Duende Identity Server.
Viktigt!
Duende Identity Server är en produkt med öppen källkod med ett ömsesidigt licensavtal. Om du planerar att använda Duende Identity Server i produktion kan du behöva skaffa en kommersiell licens från Duende Software och betala en licensavgift. Mer information finns i Duende Software: Licenses.
Information om hur du använder Microsoft Azure Active Directory för ASP.NET Core Identityfinns i Identity (dotnet/aspnetcore GitHub-lagringsplats).
Lägg till en DbSet<Key> egenskap med namnet Keys till varje IdentityDbContext för att uppfylla ett nytt krav från den uppdaterade versionen av IPersistedGrantDbContext. Nycklarna krävs som en del av kontraktet med Duende-serverns Identity butiker.
public DbSet<Key> Keys { get; set; }
Anmärkning
Befintliga migreringar måste återskapas för Duende Identity Server.
Kodexempel som migrerats till ASP.NET Core i .NET 6
Kodexempel som migrerats till den nya minimala värdmodellen i 6.0
Brytande förändringar
Använd artiklarna i Icke-bakåtkompatibla ändringar i .NET för att hitta icke-bakåtkompatibla ändringar som kan gälla när du uppgraderar en app till en nyare version av .NET.
Mer information finns i Meddelanden GitHub-lagringsplats (aspnet/Announcements, 6.0.0 etikett): Innehåller information om icke-bakåtkompatibel information.
Nullable referenstyper (NRTs) och statisk analys av null-tillstånd med .NET-kompilatorn
ASP.NET Core-projektmallar använder nullbara referenstyper (NRT) och .NET-kompilatorn utför statisk analys med null-tillstånd. Dessa funktioner släpptes med C# 8 och är aktiverade som standard för appar som genereras med ASP.NET Core i .NET 6 (C# 10) eller senare.
.NET-kompilatorns statiska analysvarningar med null-tillstånd kan antingen fungera som en guide för att uppdatera ett dokumentationsexempel eller exempelapp lokalt eller ignoreras. Statisk analys med null-tillstånd kan inaktiveras genom att Nullableange disable till i appens projektfil, som vi endast rekommenderar för dokumentationsexempel och exempelappar om kompilatorvarningarna distraherar när du lär dig mer om .NET.
Vi rekommenderar inte att du inaktiverar null-tillståndskontroll i produktionsprojekt.
Mer information om NRT, egenskapen MSBuild Nullable och uppdatering av appar (inklusive #pragma vägledning) finns i följande resurser i C#-dokumentationen:
- Referenstyper som kan ogiltigförklaras
- Nullbara referenstyper (C#-referens)
- Lär dig tekniker för att lösa null-varningar
- Uppdatera en kodbas med null-referenstyper för att förbättra diagnostikvarningar för null
- Attribut för statisk analys med null-tillstånd
- ! Operatorn null-förlåtande (C#-referens)
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.
Ändring av programnamn
I .NET 6 WebApplicationBuilder normaliserar du innehållsrotsökvägen så att den slutar med en DirectorySeparatorChar. De flesta appar som migreras från HostBuilder eller WebHostBuilder har inte samma appnamn eftersom de inte är normaliserade. Mer information finns i SetApplicationName
Ytterligare resurser
ASP.NET Core