Migrace z ASP.NET Core 2.1 na 2.2

Autor: Scott Addie

Tento článek vysvětluje, jak aktualizovat existující projekt ASP.NET Core 2.1 na ASP.NET Core 2.2.

Požadavky

Upozorňující

Pokud používáte Visual Studio 2017, přečtěte si téma dotnet/sdk problém č. 3124 , kde najdete informace o verzích sady .NET Core SDK, které nefungují se sadou Visual Studio.

Aktualizace monikeru cílové architektury (TFM)

Projekty, které cílí na .NET Core, by měly používat TFM verze větší nebo rovno .NET Core 2.2. V souboru projektu aktualizujte <TargetFramework> vnitřní text uzlu pomocí netcoreapp2.2:

<TargetFramework>netcoreapp2.2</TargetFramework>

Projekty, které cílí na rozhraní .NET Framework, můžou nadále používat TFM verze vyšší nebo rovny rozhraní .NET Framework 4.6.1:

<TargetFramework>net461</TargetFramework>

Přijetí modelu hostování v procesu služby IIS

Pokud chcete přijmout model hostování v procesu pro službu IIS, přidejte <AspNetCoreHostingModel> vlastnost s hodnotou InProcess do <PropertyGroup> souboru projektu:

<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>

Model hostování v procesu se nepodporuje pro aplikace ASP.NET Core, které cílí na rozhraní .NET Framework.

Další informace najdete v tématu Modul ASP.NET Core (ANCM) pro službu IIS.

Aktualizace vlastního souboru web.config

Pro projekty, které používají vlastní soubor web.config v kořenovém adresáři projektu k vygenerování publikovaného souboru web.config :

  • <handlers> V položce, která přidá ASP.NET Core Module (name="aspNetCore"), změňte hodnotu atributu modules z AspNetCoreModule na AspNetCoreModuleV2.
  • V elementu <aspNetCore> přidejte atribut modelu hostování (hostingModel="InProcess").

Další informace a ukázkové soubory web.config najdete v tématu ASP.NET Základní modul (ANCM) pro službu IIS.

Aktualizace odkazů na balíčky

Pokud cílíte na .NET Core, odeberte atribut odkazu Version metabalíku v souboru projektu. Zahrnutí atributu Version má za následek následující upozornění:

A PackageReference to 'Microsoft.AspNetCore.App' specified a Version of `2.2.0`. Specifying the version of this package is not recommended. For more information, see https://aka.ms/sdkimplicitrefs

Další informace najdete v tématu Microsoft.AspNetCore.App metabalíku pro ASP.NET Core.

Odkaz na metabalír by měl vypadat podobně jako na následujícím <PackageReference /> uzlu:

<ItemGroup>
  <PackageReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>

Pokud cílíte na rozhraní .NET Framework, aktualizujte atribut odkazu Version na každý balíček na verzi 2.2.0 nebo novější. Tady jsou odkazy na balíčky v typickém projektu ASP.NET Core 2.2, který cílí na rozhraní .NET Framework:

<ItemGroup>
  <PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
  <PackageReference Include="Microsoft.AspNetCore.CookiePolicy" Version="2.2.0" />
  <PackageReference Include="Microsoft.AspNetCore.HttpsPolicy" Version="2.2.0" />
  <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
  <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.2.0" />
</ItemGroup>

Pokud odkazujete na Microsoft.AspNetCore.Razor. Balíček návrhu aktualizujte jeho Version atribut na verzi 2.2.0 nebo novější. Pokud to neuděláte, dojde k následující chybě:

Detected package downgrade: Microsoft.AspNetCore.Razor.Design from 2.2.0 to 2.1.2. Reference the package directly from the project to select a different version.

Aktualizace verze sady .NET Core SDK v global.json

Pokud vaše řešení spoléhá na global.json soubor, který cílí na konkrétní verzi sady .NET Core SDK, aktualizujte jeho version vlastnost na verzi 2.2 nainstalovanou na vašem počítači:

{
  "sdk": {
    "version": "2.2.100"
  }
}

Aktualizace nastavení spuštění

Pokud používáte Visual Studio Code, aktualizujte soubor nastavení spuštění projektu (.vscode/launch.json). Cesta program by měla odkazovat na nový TFM:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": ".NET Core Launch (web)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            "program": "${workspaceFolder}/bin/Debug/netcoreapp2.2/test-app.dll",
            "args": [],
            "cwd": "${workspaceFolder}",
            "stopAtEntry": false,
            "internalConsoleOptions": "openOnSessionStart",
            "launchBrowser": {
                "enabled": true,
                "args": "${auto-detect-url}",
                "windows": {
                    "command": "cmd.exe",
                    "args": "/C start ${auto-detect-url}"
                },
                "osx": {
                    "command": "open"
                },
                "linux": {
                    "command": "xdg-open"
                }
            },
            "env": {
                "ASPNETCORE_ENVIRONMENT": "Development"
            },
            "sourceFileMap": {
                "/Views": "${workspaceFolder}/Views"
            }
        },
        {
            "name": ".NET Core Attach",
            "type": "coreclr",
            "request": "attach",
            "processId": "${command:pickProcess}"
        }
    ]
}

Aktualizace Kestrel konfigurace

Pokud aplikace volá voláním metody CreateWebHostBuilderProgram třídy, volání ConfigureKestrel konfigurace Kestrel serveru místo UseKestrel aby nedocházelo ke konfliktům s modelem hostování v procesu služby IIS:CreateDefaultBuilderUseKestrel

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .ConfigureKestrel((context, options) =>
        {
            // Set properties and call methods on options
        });

Pokud aplikace nevolá CreateDefaultBuilder a sestaví hostitele ručně ve Program třídě, zavolejte UseKestrelpřed voláním ConfigureKestrel:

public static void Main(string[] args)
{
    var host = new WebHostBuilder()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseKestrel()
        .UseIISIntegration()
        .UseStartup<Startup>()
        .ConfigureKestrel((context, options) =>
        {
            // Set properties and call methods on options
        })
        .Build();

    host.Run();
}

Další informace najdete Kestrel na webovém serveru v ASP.NET Core.

Aktualizace verze kompatibility

Aktualizujte verzi Startup.ConfigureServices kompatibility na Version_2_2:

services.AddMvc()
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

Aktualizace zásad CORS

V ASP.NET Core 2.2 odpoví middleware CORS zástupným znakem (*), pokud zásada povolí jakýkoli zdroj a povolí přihlašovací údaje. Přihlašovací údaje nejsou podporovány, pokud je zadaný zástupný znak (*) a prohlížeče nepovolí žádost CORS. Další informace, včetně možností opravy problému na klientovi, najdete ve webové dokumentaci MDN.

Chcete-li tento problém opravit na serveru, proveďte jednu z následujících akcí:

  • Upravte zásady CORS tak, aby už nepovolily přihlašovací údaje. To znamená, že při konfiguraci zásad odeberte volání AllowCredentials .
  • Pokud jsou pro úspěšný požadavek CORS vyžadovány přihlašovací údaje, upravte zásadu tak, aby určila povolené hostitele. Například použijte builder.WithOrigins("https://api.example1.com", "https://example2.com") místo použití AllowAnyOrigin.

Aktualizace imagí Dockeru

Následující tabulka ukazuje změny značky image Dockeru:

2.1 2.2
microsoft/dotnet:2.1-aspnetcore-runtime mcr.microsoft.com/dotnet/core/aspnet:2.2
microsoft/dotnet:2.1-sdk mcr.microsoft.com/dotnet/core/sdk:2.2

FROM Změňte řádky v souboru Dockerfile tak, aby používaly nové značky imagí ve sloupci 2.2 předchozí tabulky.

Ruční sestavení v sadě Visual Studio při hostování v procesu služby IIS

Automatické sestavení sady Visual Studio v prostředí žádostí o prohlížeč nefunguje s modelem hostování v procesu služby IIS. Pokud používáte hostování v procesu, musíte projekt ručně znovu sestavit. Vylepšení tohoto prostředí se plánují pro budoucí vydání sady Visual Studio.

Aktualizace kódu protokolování

Doporučený konfigurační kód protokolování se nezměnil z verze 2.1 na 2.2, ale některé vzory kódování 1.x, které stále fungovaly ve verzi 2.1, už nefungují ve verzi 2.2.

Pokud vaše aplikace inicializaci, filtrování a načítání konfigurace zprostředkovatele protokolování ve Startup třídě provede, přesuňte tento kód do Program.Main:

  • Inicializace zprostředkovatele:

    Příklad 1.x:

    public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole();
    }
    

    2.2 příklad:

    
    public static void Main(string[] args)
    {
        var webHost = new WebHostBuilder()
            // ...
            .ConfigureLogging((hostingContext, logging) =>
            {
                logging.AddConsole();
            })
            // ...
    }
    
  • Filtrování:

    Příklad 1.x:

    public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(LogLevel.Information);
        // or
        loggerFactory.AddConsole((category, level) => 
            category == "A" || level == LogLevel.Critical);
    }
    

    2.2 příklad:

    public static void Main(string[] args)
    {
        var webHost = new WebHostBuilder()
            // ...
            .ConfigureLogging((hostingContext, logging) =>
            {
                logging.AddConsole()
                       .AddFilter<ConsoleLoggerProvider>
                           (category: null, level: LogLevel.Information)
                       // or
                       .AddFilter<ConsoleLoggerProvider>
                           ((category, level) => category == "A" ||
                               level == LogLevel.Critical)
                );
            })
            // ...
    }
    
  • Načítání konfigurace:

    Příklad 1.x:

    public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration);
    }
    

    2.2 příklad:

    public static void Main(string[] args)
    {
        var webHost = new WebHostBuilder()
            // ...
            .ConfigureLogging((hostingContext, logging) =>
            {
                logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
                logging.AddConsole();
            })
            // ...
    }
    

Další informace najdete v tématu Protokolování v .NET Core a ASP.NET Core

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ší prostředky