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.
Se Nyheter i ASP.NET Core 2.1 för en översikt över de nya funktionerna i ASP.NET Core 2.1.
Den här artikeln:
- Omfattar grunderna för att migrera en ASP.NET Core 2.0-app till 2.1.
- Ger en översikt över ändringarna i ASP.NET Core-webbprogrammallar.
Ett snabbt sätt att få en översikt över ändringarna i 2.1 är att:
- Skapa en ASP.NET Core 2.0-webbapp med namnet WebApp1.
- Checka in WebApp1 i ett källkontrollsystem.
- Ta bort WebApp1 och skapa en ASP.NET Core 2.1-webbapp med namnet WebApp1 på samma plats.
- Granska ändringarna i 2.1-versionen.
Den här artikeln innehåller en översikt över migrering till ASP.NET Core 2.1. Den innehåller inte en fullständig lista över alla ändringar som krävs för att migrera till version 2.1. Vissa projekt kan kräva fler steg beroende på vilka alternativ som valdes när projektet skapades och ändringar som gjorts i projektet.
Uppdatera projektfilen så att den använder 2.1-versioner
Uppdatera projektfilen:
- Ändra målramverket till .NET Core 2.1 genom att uppdatera projektfilen till
<TargetFramework>netcoreapp2.1</TargetFramework>. - Ersätt paketreferensen för
Microsoft.AspNetCore.Allmed en paketreferens förMicrosoft.AspNetCore.App. Du kan behöva lägga till beroenden som har tagits bort frånMicrosoft.AspNetCore.All. Mer information finns i Microsoft.AspNetCore.All metapackage for ASP.NET Core 2.0 and Microsoft.AspNetCore.App metapackage for ASP.NET Core. - Ta bort attributet "Version" i paketreferensen till
Microsoft.AspNetCore.App. Projekt som använder<Project Sdk="Microsoft.NET.Sdk.Web">behöver inte ange versionen. Versionen är underförstådd av målramverket och väljs för att bäst matcha hur ASP.NET Core 2.1 fungerar. Mer information finns i avsnittet Regler för projekt som är inriktade på det delade ramverket . - För appar som riktar sig till .NET Framework uppdaterar du varje paketreferens till 2.1.
- Ta bort referenser till <DotNetCliToolReference-element> för följande paket. Dessa verktyg paketeras som standard i .NET CLI och behöver inte installeras separat.
- Microsoft.DotNet.Watcher.Tools (
dotnet watch) - Microsoft.EntityFrameworkCore.Tools.DotNet (
dotnet ef) - Microsoft.Extensions.Caching.SqlConfig.Tools (
dotnet sql-cache) - Microsoft.Extensions.SecretManager.Tools (
dotnet user-secrets)
- Microsoft.DotNet.Watcher.Tools (
- Valfritt: du kan ta bort elementet< DotNetCliToolReference> för
Microsoft.VisualStudio.Web.CodeGeneration.Tools. Du kan ersätta det här verktyget med en globalt installerad version genom att köradotnet tool install -g dotnet-aspnet-codegenerator. - För 2.1 är ett Razor klassbibliotek den rekommenderade lösningen för att distribuera Razor filer. Om appen använder inbäddade vyer eller på annat sätt förlitar sig på körningskompilering av Razor filer lägger du till
<CopyRefAssembliesToPublishDirectory>true</CopyRefAssembliesToPublishDirectory>i en<PropertyGroup>i projektfilen.
Följande markering visar den mallgenererade 2.0-projektfilen:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
<UserSecretsId>aspnet-{Project Name}-{GUID}</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.3" PrivateAssets="All" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.4" PrivateAssets="All" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3" />
<DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.2" />
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.4" />
</ItemGroup>
</Project>
Följande markering visar den mallgenererade 2.1-projektfilen:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<UserSecretsId>aspnet-{Project Name}-{GUID}</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.1.1" PrivateAssets="All" />
</ItemGroup>
</Project>
Regler för projekt som är inriktade på det delade ramverket
Ett delat ramverk är en uppsättning sammansättningar (.dll filer) som inte finns i appens mappar. Det delade ramverket måste vara installerat på datorn för att kunna köra appen. Mer information finns i Det delade ramverket.
ASP.NET Core 2.1 innehåller följande delade ramverk:
Den version som anges av paketreferensen är den lägsta version som krävs . Ett projekt som refererar till 2.1.1-versionerna av dessa paket körs till exempel inte på en dator med endast 2.1.0-körningen installerad.
Kända problem för projekt som är inriktade på ett delat ramverk:
.NET Core 2.1.300 SDK (som först ingår i Visual Studio 15.6) anger den implicita versionen av
Microsoft.AspNetCore.Apptill 2.1.0 som orsakade konflikter med Entity Framework Core 2.1.1. Den rekommenderade lösningen är att uppgradera .NET Core SDK till 2.1.301 eller senare. Mer information finns i Paket som delar beroenden med Microsoft.AspNetCore.App inte kan referera till korrigeringsversioner.Alla projekt som måste använda
Microsoft.AspNetCore.AllellerMicrosoft.AspNetCore.Appbör lägga till en paketreferens för paketet i projektfilen, även om de innehåller en projektreferens till ett annat projekt som använderMicrosoft.AspNetCore.AllellerMicrosoft.AspNetCore.App.Exempel:
-
MyApphar en paketreferens tillMicrosoft.AspNetCore.App. -
MyApp.Testshar en projektreferens tillMyApp.csproj.
Lägg till en paketreferens för
Microsoft.AspNetCore.ApptillMyApp.Tests. Mer information finns i Integreringstestning är svårt att konfigurera och kan brytas vid service av delade ramverk.-
Uppdatera till 2.1 Docker-avbildningarna
I ASP.NET Core 2.1 migrerades Docker-avbildningarna till GitHub-lagringsplatsen dotnet/dotnet-docker. I följande tabell visas Docker-avbildningen och taggändringarna:
| 2.0 | 2.1 |
|---|---|
| microsoft/aspnetcore:2.0 | microsoft/dotnet:2.1-aspnetcore-runtime |
| microsoft/aspnetcore-build:2.0 | microsoft/dotnet:2.1-sdk |
Ändra raderna FROM i Dockerfile så att de använder de nya bildnamnen och taggarna i föregående tabells kolumn 2.1. Mer information finns i Migrera från aspnetcore docker-lagringsplatser till dotnet.
Ändringar för att dra nytta av de nya kodbaserade idiom som rekommenderas i ASP.NET Core 2.1
Ändringar i Main
Följande bilder visar de ändringar som gjorts i den mallgenererade Program.cs filen.
Föregående bild visar 2.0-versionen med borttagningarna i rött.
Följande bild visar 2.1-koden. Koden i grönt ersatte 2.0-versionen:
Följande kod visar 2.1-versionen av Program.cs:
namespace WebApp1
{
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
}
Den nya Main ersätter anropet till BuildWebHost med CreateWebHostBuilder.
IWebHostBuilder lades till för att stödja en ny infrastruktur för integrationstest.
Ändringar i start
Följande kod visar ändringarna i 2.1-mallens genererade kod. Alla ändringar har nyligen lagts till kod, förutom att de UseBrowserLink har tagits bort:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace WebApp1
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
// If the app uses Session or TempData based on Session:
// app.UseSession();
app.UseMvc();
}
}
}
De föregående kodändringarna beskrivs i:
-
GDPR-stöd i ASP.NET Core för
CookiePolicyOptionsochUseCookiePolicy. -
HTTP Strict Transport Security Protocol (HSTS) för
UseHsts. -
Kräv HTTPS för
UseHttpsRedirection. -
SetCompatibilityVersion för
SetCompatibilityVersion(CompatibilityVersion.Version_2_1).
Ändringar i autentiseringskoden
ASP.NET Core 2.1 tillhandahåller ASP.NET Core Identity som ett Razor klassbibliotek (RCL).
Standardgränssnittet för 2.1 Identity tillhandahåller för närvarande inte några viktiga nya funktioner jämfört med 2.0-versionen. Det är valfritt att Identity ersätta med RCL-paketet. Fördelarna med att ersätta den mallgenererade Identity koden med RCL-versionen är:
- Många filer flyttas från källträdet.
- Eventuella felkorrigeringar eller nya funktioner som Identity ingår i Microsoft.AspNetCore.App metapackage. Du får automatiskt den uppdaterade Identity när
Microsoft.AspNetCore.Appden uppdateras.
Om du har gjort icke-triviala ändringar i den mallgenererade Identity koden:
- De föregående fördelarna motiverar förmodligen inte konvertering till RCL-versionen.
- Du kan behålla din ASP.NET Core 2.0-kod Identity . Den stöds fullt ut.
Identity 2.1 exponerar slutpunkter med området Identity . I följande tabell visas till exempel slutpunkter Identity som ändras från 2.0 till 2.1:
| 2.0 URL | 2.1 URL |
|---|---|
| /Konto/Inloggning | /Identity/Konto/Inloggning |
| /Konto/utloggning | /Identity/Konto/Utloggning |
| /Konto/Hantera | /Identity/Konto/Hantera |
Program som har kod som använder Identity och ersätter 2.0-användargränssnittet Identity med 2.1-biblioteket Identity måste ta hänsyn Identity till att URL:er har /Identity segmentförberedelse till URI:erna. Ett sätt att hantera de nya Identity slutpunkterna är att konfigurera omdirigeringar, till exempel från /Account/Login till /Identity/Account/Login.
Uppdatera Identity till version 2.1
Följande alternativ är tillgängliga för uppdatering Identity till 2.1.
- Identity Använd UI 2.0-koden utan ändringar. Användning av Identity UI 2.0-kod stöds fullt ut. Det här är en bra metod när betydande ändringar har gjorts i den genererade Identity koden.
- Ta bort din befintliga Identity 2.0-kod och scaffold Identity i projektet. Projektet använder klassbiblioteket ASP.NET CoreIdentityRazor. Du kan generera kod och användargränssnitt för någon av de användargränssnittskoder Identity som du har ändrat. Tillämpa dina kodändringar på den nyligen kodade användargränssnittskoden.
- Ta bort din befintliga Identity 2.0-kod och scaffold Identity i projektet med alternativet åsidosätt alla filer.
Ersätt Identity 2.0-användargränssnittet med Identity 2.1-klassbiblioteket Razor
I det här avsnittet beskrivs stegen för att ersätta mallgenererad Identity kod ASP.NET Core 2.0 med ASP.NET Core-klassbiblioteketIdentityRazor. Följande steg gäller för ett Razor Pages-projekt, men metoden för ett MVC-projekt är liknande.
- Kontrollera att projektfilen har uppdaterats för att använda 2.1-versioner
- Ta bort följande mappar och alla filer i dem:
- Styrenheter
- Sidor/konto/
- Tillägg
- Skapa projektet.
-
Schavott Identity i projektet:
- Välj de projekt som avslutar filen _Layout.cshtml .
- + Välj ikonen till höger i klassen Datakontext. Acceptera standardnamnet.
- Välj Lägg till för att skapa en ny datakontextklass. Det krävs att du skapar en ny datakontext för att skapa en byggnadsställning. Du tar bort den nya datakontexten i nästa avsnitt.
Uppdatera efter byggnadsställningar Identity
Ta bort den Identity scaffolder-genererade
IdentityDbContexthärledda klassen i mappen Områden/Identity/Data/ .Ta bort
Areas/Identity/IdentityHostingStartup.cs.Uppdatera filen _LoginPartial.cshtml :
- Flytta Pages/_LoginPartial.cshtml till Pages/Shared/_LoginPartial.cshtml.
- Lägg till
asp-area="Identity"i formulär- och fästpunktslänkarna. - Uppdatera elementet
<form />till<form asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Page("/Index", new { area = "" })" method="post" id="logoutForm" class="navbar-right">.
Följande kod visar den uppdaterade filen _LoginPartial.cshtml :
@using Microsoft.AspNetCore.Identity @inject SignInManager<ApplicationUser> SignInManager @inject UserManager<ApplicationUser> UserManager @if (SignInManager.IsSignedIn(User)) { <form asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Page("/Index", new { area = "" })" method="post" id="logoutForm" class="navbar-right"> <ul class="nav navbar-nav navbar-right"> <li> <a asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">Hello @UserManager.GetUserName(User)!</a> </li> <li> <button type="submit" class="btn btn-link navbar-btn navbar-link">Log out</button> </li> </ul> </form> } else { <ul class="nav navbar-nav navbar-right"> <li><a asp-area="Identity" asp-page="/Account/Register">Register</a></li> <li><a asp-area="Identity" asp-page="/Account/Login">Log in</a></li> </ul> }
Uppdatera ConfigureServices med följande kod:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<ApplicationUser>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddMvc();
// Register no-op EmailSender used by account confirmation and password reset
// during development
services.AddSingleton<IEmailSender, EmailSender>();
}
Ändringar i Razor pages-projektfiler Razor
Layoutfilen
Flytta sidor/_Layout.cshtml till sidor/delad/_Layout.cshtml
I Områden/Identity/Sidor/_ViewStart.cshtml ändrar du
Layout = "/Pages/_Layout.cshtml"tillLayout = "/Pages/Shared/_Layout.cshtml".Filen _Layout.cshtml har följande ändringar:
-
<partial name="_CookieConsentPartial" />läggs till. Mer information finns i GDPR-stöd i ASP.NET Core. - jQuery ändras från 2.2.0 till 3.3.1.
-
_ValidationScriptsPartial.cshtml
- Pages/_ValidationScriptsPartial.cshtml flyttas till Sidor/Delad/_ValidationScriptsPartial.cshtml.
- jquery.validate/1.14.0 ändras till jquery.validate/1.17.0.
Nya filer
Följande filer läggs till:
Privacy.cshtmlPrivacy.cshtml.cs
Mer information om de föregående filerna finns i GDPR-stöd i ASP.NET Core .
Ändringar i MVC-projektfiler Razor
Layoutfilen
Filen Layout.cshtml har följande ändringar:
-
<partial name="_CookieConsentPartial" />läggs till. - jQuery ändras från 2.2.0 till 3.3.1
_ValidationScriptsPartial.cshtml
jquery.validate/1.14.0 ändras till jquery.validate/1.17.0
Nya filer och åtgärdsmetoder
Följande läggs till:
Views/Home/Privacy.cshtml- Åtgärdsmetoden
Privacyläggs till i kontrollanten Home .
Mer information om de föregående filerna finns i GDPR-stöd i ASP.NET Core .
Ändringar i launchSettings.json-filen
Eftersom ASP.NET Core-appar nu använder HTTPS som standard Properties/launchSettings.json har filen ändrats.
Följande JSON visar den tidigare 2.0-mallgenererade launchSettings.json filen:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:1799/",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"WebApp1": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:1798/"
}
}
}
Följande JSON visar den nya 2.1-mallgenererade launchSettings.json filen:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:39191",
"sslPort": 44390
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"WebApp1": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
Mer information finns i Framtvinga HTTPS i ASP.NET Core.
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.
FileResult Range-rubrik
FileResult bearbetar inte längre accept-ranges-huvudet som standard. Om du vill aktivera Accept-Ranges rubriken anger du EnableRangeProcessing till true.
ControllerBase.File- och PhysicalFile Range-huvud
Följande ControllerBase metoder bearbetar inte längre accept-ranges-huvudet som standard:
- Överlagringar av ControllerBase.File
- ControllerBase.PhysicalFile
Om du vill aktivera Accept-Ranges rubriken anger du parametern EnableRangeProcessing till true.
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 (direktnedladdning) och kör installationsprogrammet. Mer information finns i Värdpaket.
Ytterligare ändringar
ASP.NET Core