Migrace z ASP.NET Core 2.0 na 2.1
Autor: Rick Anderson
Podívejte se na novinky v ASP.NET Core 2.1 a podívejte se na přehled nových funkcí v ASP.NET Core 2.1.
Tento článek:
- Popisuje základy migrace aplikace ASP.NET Core 2.0 na verzi 2.1.
- Poskytuje přehled změn šablon webových aplikací ASP.NET Core.
Rychlý způsob, jak získat přehled změn ve verzi 2.1, je:
- Vytvořte webovou aplikaci ASP.NET Core 2.0 s názvem WebApp1.
- Potvrďte WebApp1 v systému správy zdrojového kódu.
- Odstraňte WebApp1 a na stejném místě vytvořte webovou aplikaci ASP.NET Core 2.1 s názvem WebApp1.
- Zkontrolujte změny ve verzi 2.1.
Tento článek obsahuje přehled migrace na ASP.NET Core 2.1. Neobsahuje úplný seznam všech změn potřebných k migraci na verzi 2.1. Některé projekty můžou vyžadovat další kroky v závislosti na možnostech vybraných při vytvoření projektu a úpravách projektu.
Aktualizace souboru projektu tak, aby používala verze 2.1
Aktualizujte soubor projektu:
- Změňte cílovou architekturu na .NET Core 2.1 aktualizací souboru projektu na
<TargetFramework>netcoreapp2.1</TargetFramework>
. - Nahraďte odkaz
Microsoft.AspNetCore.All
na balíček odkazem proMicrosoft.AspNetCore.App
. Je možné, že budete muset přidat závislosti, které byly odebrány zMicrosoft.AspNetCore.All
. Další informace naleznete v tématu Microsoft.AspNetCore.All metapackage pro ASP.NET Core 2.0 a Microsoft.AspNetCore.App metapackage pro ASP.NET Core. - Odeberte atribut Version u odkazu na
Microsoft.AspNetCore.App
balíček . Projekty, které používají<Project Sdk="Microsoft.NET.Sdk.Web">
, nemusí nastavovat verzi. Verze vychází z cílové architektury a je vybraná tak, aby odpovídala způsobu, jakým funguje ASP.NET Core 2.1. Další informace najdete v části Pravidla pro projekty, které cílí na oddíl sdílené architektury . - U aplikací, které cílí na rozhraní .NET Framework, aktualizujte jednotlivé odkazy na balíčky na verzi 2.1.
- Odeberte odkazy na <dotNetCliToolReference> elementy pro následující balíčky. Tyto nástroje jsou ve výchozím nastavení součástí rozhraní příkazového řádku .NET a není nutné je instalovat samostatně.
- 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 (
- Volitelné: Můžete odebrat DotNetCliToolReference> element pro
Microsoft.VisualStudio.Web.CodeGeneration.Tools
.< Tento nástroj můžete nahradit globálně nainstalovanou verzí spuštěnímdotnet tool install -g dotnet-aspnet-codegenerator
příkazu . - Pro verzi 2.1 se doporučuje distribuovat Razor soubory knihovnou Razor tříd. Pokud vaše aplikace používá vložená zobrazení nebo jinak spoléhá na kompilaci Razor souborů za běhu, přidejte
<CopyRefAssembliesToPublishDirectory>true</CopyRefAssembliesToPublishDirectory>
do<PropertyGroup>
souboru projektu.
Následující kód ukazuje soubor projektu 2.0 vygenerovaný šablonou:
<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>
Následující kód ukazuje soubor projektu 2.1 vygenerovaný šablonou:
<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>
Pravidla pro projekty, které cílí na sdílenou architekturu
Sdílená architektura je sada sestavení (.dll souborů), která nejsou ve složkách aplikace. Aby bylo možné aplikaci spustit, musí být na počítači nainstalovaná sdílená architektura. Další informace naleznete v části Sdílená architektura.
ASP.NET Core 2.1 obsahuje následující sdílené architektury:
Minimální požadovaná verze je verze určená odkazem na balíček. Například projekt odkazující na verze 2.1.1 těchto balíčků se nespustí na počítači s nainstalovaným modulem runtime 2.1.0.
Známé problémy u projektů, které cílí na sdílenou architekturu:
Sada .NET Core 2.1.300 SDK (první součástí sady Visual Studio 15.6) nastavila implicitní verzi
Microsoft.AspNetCore.App
2.1.0, která způsobila konflikty s Entity Framework Core 2.1.1. Doporučeným řešením je upgrade sady .NET Core SDK na verzi 2.1.301 nebo novější. Další informace naleznete v tématu Balíčky, které sdílejí závislosti s Microsoft.AspNetCore.App nemohou odkazovat na verze oprav.Všechny projekty, které musí použít
Microsoft.AspNetCore.All
neboMicrosoft.AspNetCore.App
by měly přidat odkaz na balíček v souboru projektu, i když obsahují odkaz na projekt na jiný projekt používajícíMicrosoft.AspNetCore.All
neboMicrosoft.AspNetCore.App
.Příklad:
MyApp
obsahuje odkaz naMicrosoft.AspNetCore.App
balíček .MyApp.Tests
obsahuje odkaz naMyApp.csproj
projekt .
Přidejte odkaz na balíček pro
Microsoft.AspNetCore.App
.MyApp.Tests
Další informace najdete v tématu Testování integrace je obtížné nastavit a může dojít k přerušení údržby sdílených architektur.
Aktualizace na image Dockeru 2.1
V ASP.NET Core 2.1 se image Dockeru migrovaly do úložiště dotnet/dotnet-docker GitHub. Následující tabulka ukazuje změny image a značky Dockeru:
2.0 | 2.1 |
---|---|
microsoft/aspnetcore:2.0 | microsoft/dotnet:2.1-aspnetcore-runtime |
microsoft/aspnetcore-build:2.0 | microsoft/dotnet:2.1-sdk |
FROM
Změňte řádky v souboru Dockerfile tak, aby používaly nové názvy a značky imagí ve sloupci 2.1 předchozí tabulky. Další informace najdete v tématu Migrace z úložišť dockeru aspnetcore do dotnet.
Změny pro využití nových idiomů založených na kódu, které se doporučují v ASP.NET Core 2.1
Změny v hlavní části
Následující obrázky ukazují změny provedené v vygenerovaném Program.cs
souboru šablony.
Předchozí obrázek ukazuje verzi 2.0 s červenými odstraněními.
Následující obrázek ukazuje kód 2.1. Kód zeleně nahradil verzi 2.0:
Následující kód ukazuje verzi Program.cs
2.1:
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>();
}
}
Nový Main
nahradí volání BuildWebHost
za CreateWebHostBuilder. IWebHostBuilder byla přidána pro podporu nové infrastruktury integračního testu.
Změny při spuštění
Následující kód ukazuje změny vygenerovaného kódu šablony 2.1. Všechny změny jsou nově přidané kódy, s výjimkou toho, že UseBrowserLink
byly odebrány:
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();
}
}
}
Předchozí změny kódu jsou podrobně popsané v následujících krocích:
- Podpora GDPR v ASP.NET Core pro
CookiePolicyOptions
aUseCookiePolicy
. - HTTP Strict Transport Security Protocol (HSTS) pro
UseHsts
. - Vyžadovat HTTPS pro
UseHttpsRedirection
. - NastavitCompatibilityVersion pro
SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.
Změny ověřovacího kódu
ASP.NET Core 2.1 poskytuje ASP.NET Core Identity jako knihovnu Razor tříd (RCL).
Výchozí uživatelské rozhraní 2.1 Identity v současné době neposkytuje významné nové funkce ve verzi 2.0. Nahrazení Identity balíčkem RCL je volitelné. Mezi výhody nahrazení vygenerovaného Identity kódu šablony verzí RCL patří:
- Mnoho souborů se přesune ze zdrojového stromu.
- Všechny opravy chyb nebo nové funkce, které se mají zahrnout do Identity Microsoft.AspNetCore.App metabalíku. Po aktualizaci se automaticky aktualizuje Identity
Microsoft.AspNetCore.App
.
Pokud jste vygenerovanému Identity kódu šablony provedli jiné než triviální změny:
- Předchozí výhody pravděpodobně neodůvodňují převod na verzi RCL.
- Kód ASP.NET Core 2.0 Identity můžete zachovat, je plně podporovaný.
Identity 2.1 zveřejňuje koncové body s Identity
oblastí. Následující tabulka například ukazuje příklady Identity koncových bodů, které se mění z 2.0 na 2.1:
Adresa URL 2.0 | Adresa URL 2.1 |
---|---|
/Account/Login | /Identity/Account/Login |
/Account/Logout | /Identity/Account/Logout |
/Account/Manage | /Identity/Account/Manage |
Aplikace, které mají kód používající Identity a nahrazují uživatelské rozhraní 2.0 Identity knihovnou 2.1 Identity , musí vzít v úvahu Identity adresy URL, které jsou /Identity
předem rozdělené na identifikátory URI. Jedním ze způsobů, jak zpracovat nové Identity koncové body, je nastavit přesměrování, například z /Account/Login
do /Identity/Account/Login
.
Aktualizace Identity na verzi 2.1
Pro aktualizaci Identity na verzi 2.1 jsou k dispozici následující možnosti.
- Identity Použijte kód uživatelského rozhraní 2.0 beze změn. Použití Identity kódu uživatelského rozhraní 2.0 je plně podporováno. Jedná se o dobrý přístup v případě, že se vygenerovanému Identity kódu provedly významné změny.
- Odstraňte stávající Identity kód 2.0 a vygenerujte ho Identity do projektu. Váš projekt bude používat knihovnu tříd ASP.NET Core IdentityRazor . Kód a uživatelské rozhraní můžete vygenerovat pro libovolný Identity kód uživatelského rozhraní, který jste upravili. Použijte změny kódu na nově vygenerovaný kód uživatelského rozhraní.
- Odstraňte stávající Identity kód 2.0 a vygenerujte ho Identity do projektu s možností Přepsat všechny soubory.
Nahrazení Identity uživatelského rozhraní 2.0 knihovnou Identity tříd 2.1 Razor
Tato část popisuje postup nahrazení kódu generovaného Identity šablonou ASP.NET Core 2.0 knihovnou tříd ASP.NET CoreRazor Identity . Následující kroky jsou určené pro Razor projekt Pages, ale přístup k projektu MVC je podobný.
- Ověřte, že je soubor projektu aktualizovaný tak, aby používal verze 2.1.
- Odstraňte následující složky a všechny soubory v nich:
- Kontrolery
- Stránky/účet/
- Rozšíření
- Sestavte projekt.
- Generování uživatelského rozhraní Identity do projektu:
- Vyberte projekty, které ukončují soubor _Layout.cshtml .
- + Vyberte ikonu na pravé straně třídy kontextu dat. Přijměte výchozí název.
- Výběrem možnosti Přidat vytvořte novou třídu kontextu dat. Vytvoření nového kontextu dat se vyžaduje pro generování uživatelského rozhraní. Nový kontext dat odeberete v další části.
Aktualizace po generování uživatelského rozhraní Identity
Identity Odstraňte vygenerovanou odvozenou
IdentityDbContext
třídu scaffolder ve složce Areas/Identity/Data/.Odstraňte
Areas/Identity/IdentityHostingStartup.cs
.Aktualizujte soubor _LoginPartial.cshtml:
- Přesunout stránky/_LoginPartial.cshtml do Pages/Shared/_LoginPartial.cshtml.
- Umožňuje přidat
asp-area="Identity"
odkazy na formulář a ukotvení. - Aktualizujte prvek na
<form />
<form asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Page("/Index", new { area = "" })" method="post" id="logoutForm" class="navbar-right">
.
Následující kód ukazuje aktualizovaný soubor _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> }
Aktualizujte ConfigureServices
následujícím kódem:
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>();
}
Razor Změny v souborech projektů Razor Pages
Soubor rozložení
Přesunutí stránek/_Layout.cshtml do Pages/Shared/_Layout.cshtml
V části Oblasti//IdentityStránky/_ViewStart.cshtml přejděte
Layout = "/Pages/_Layout.cshtml"
naLayout = "/Pages/Shared/_Layout.cshtml"
.Soubor _Layout.cshtml má následující změny:
<partial name="_CookieConsentPartial" />
se přidá. Další informace najdete v tématu Podpora GDPR v ASP.NET Core.- jQuery se změní z verze 2.2.0 na 3.3.1.
_ValidationScriptsPartial.cshtml
- Stránky/_ValidationScriptsPartial.cshtml se přesunou na Pages/Shared/_ValidationScriptsPartial.cshtml.
- jquery.validate/1.14.0 se změní na jquery.validate/1.17.0.
Nové soubory
Přidají se následující soubory:
Privacy.cshtml
Privacy.cshtml.cs
Informace o předchozích souborech najdete v podpoře GDPR v ASP.NET Core .
Změny souborů projektů Razor MVC
Soubor rozložení
Soubor Layout.cshtml
má následující změny:
<partial name="_CookieConsentPartial" />
se přidá.- Změny jQuery z verze 2.2.0 na 3.3.1
_ValidationScriptsPartial.cshtml
jquery.validate/1.14.0 změny jquery.validate /1.17.0
Nové soubory a metody akcí
Přidají se následující položky:
Views/Home/Privacy.cshtml
- Metoda
Privacy
akce se přidá do Home kontroleru.
Informace o předchozích souborech najdete v podpoře GDPR v ASP.NET Core .
Změny souboru launchSettings.json
Vzhledem k tomu, že aplikace ASP.NET Core teď ve výchozím nastavení používají PROTOKOL HTTPS, Properties/launchSettings.json
soubor se změnil.
Následující json ukazuje starší soubor 2.0 vygenerovaný šablonou launchSettings.json
:
{
"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/"
}
}
}
Následující json ukazuje nový soubor 2.1 vygenerovaný launchSettings.json
šablonou:
{
"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"
}
}
}
}
Další informace najdete v tématu Vynucení HTTPS v ASP.NET Core.
Změny způsobující chyby
FileResult Range header
FileResult už ve výchozím nastavení nezvírá hlavičku Accept-Ranges . Pokud chcete záhlaví povolit Accept-Ranges
, nastavte EnableRangeProcessing hodnotu true
.
Header ControllerBase.File and PhysicalFile Range
Následující ControllerBase metody už ve výchozím nastavení nezjáří hlavičku Accept-Ranges :
Chcete-li povolit hlavičku Accept-Ranges
, nastavte EnableRangeProcessing
parametr na true
.
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.