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 pro Microsoft.AspNetCore.App. Je možné, že budete muset přidat závislosti, které byly odebrány z Microsoft.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.Appbalíč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 Core a není nutné je instalovat samostatně.
    • Microsoft.DotNet.Watcher.Tools (dotnet watch)
    • Microsoft.EntityFrameworkCore.Tools.DotNet (dotnet ef)
    • Microsoft.Extensions. Ukládání do mezipaměti. SqlConfig.Tools (dotnet sql-cache)
    • Microsoft.Extensions.SecretManager.Tools (dotnet user-secrets)
  • 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ím dotnet tool install -g dotnet-aspnet-codegeneratorpříkazu .
  • Pro verzi 2.1 se doporučuje distribuovat soubory knihovnou Razor tříd.Razor 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í (soubory .dll ), 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 nebo Microsoft.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 nebo Microsoft.AspNetCore.App.

    Příklad:

    • MyApp obsahuje odkaz na Microsoft.AspNetCore.Appbalíček .
    • MyApp.Tests obsahuje odkaz na MyApp.csprojprojekt .

    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 v hlavní části

Následující obrázky ukazují změny provedené v vygenerovaném Program.cs souboru šablony.

old version differences

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:

new version differences

Následující kód ukazuje verzi Program.cs2.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:

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 IdentityMicrosoft.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. Projekt bude používat knihovnu základních tříd ASP.NETIdentityRazor. 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.

Nahraďte Identity uživatelské rozhraní 2.0 knihovnou Identity tříd 2.1 Razor .

Tato část popisuje kroky, jak nahradit šablonu ASP.NET Core 2.0 vygenerovanou kódem knihovnou ASP.NET CoreRazorIdentityClass Library.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" na Layout = "/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 launch Nastavení.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í funkce JSON ukazuje dříve vygenerovaný launchSettings.json soubor 2.0:

{
  "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í funkce JSON ukazuje nový soubor vygenerovaný launchSettings.json šablonou 2.1:

{
  "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.

Další změny