Migruj z ASP.NET Core 2,1 do 2,2Migrate from ASP.NET Core 2.1 to 2.2

Przez Scott AddieBy Scott Addie

W tym artykule wyjaśniono, jak zaktualizować istniejący projekt ASP.NET Core 2,1 do ASP.NET Core 2,2.This article explains how to update an existing ASP.NET Core 2.1 project to ASP.NET Core 2.2.

Wymagania wstępnePrerequisites

Ostrzeżenie

Jeśli używasz programu Visual Studio 2017, zobacz problem z usługą dotnet/sdk #3124 , aby uzyskać informacje o wersjach zestaw .NET Core SDK, które nie współpracują z programem Visual Studio.If you use Visual Studio 2017, see dotnet/sdk issue #3124 for information about .NET Core SDK versions that don't work with Visual Studio.

Aktualizuj moniker platformy docelowej (TFM)Update Target Framework Moniker (TFM)

Projekty ukierunkowane na platformę .NET Core powinny korzystać z TFM wersji nowszej niż lub równej platformie .net Core 2,2.Projects targeting .NET Core should use the TFM of a version greater than or equal to .NET Core 2.2. W pliku projektu zaktualizuj <TargetFramework> tekst wewnętrzny węzła przy użyciu netcoreapp2.2 :In the project file, update the <TargetFramework> node's inner text with netcoreapp2.2:

<TargetFramework>netcoreapp2.2</TargetFramework>

Projekty ukierunkowane na .NET Framework mogą nadal korzystać z TFM wersji większej lub równej .NET Framework 4.6.1:Projects targeting .NET Framework may continue to use the TFM of a version greater than or equal to .NET Framework 4.6.1:

<TargetFramework>net461</TargetFramework>

Przyjmowanie modelu hostingu w procesie usług IISAdopt the IIS in-process hosting model

Aby zastosować model hostingu w procesie dla usług IIS, należy dodać <AspNetCoreHostingModel> Właściwość o wartości InProcess do <PropertyGroup> w pliku projektu:To adopt the in-process hosting model for IIS, add the <AspNetCoreHostingModel> property with a value of InProcess to a <PropertyGroup> in the project file:

<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>

Model hostingu w procesie nie jest obsługiwany w przypadku aplikacji ASP.NET Core dotyczących .NET Framework.The in-process hosting model isn't supported for ASP.NET Core apps targeting .NET Framework.

Aby uzyskać więcej informacji, zobacz Moduł ASP.NET Core.For more information, see Moduł ASP.NET Core.

Aktualizowanie niestandardowego pliku web.configUpdate a custom web.config file

W przypadku projektów, które używają niestandardowego pliku web.config w katalogu głównym projektu, aby wygenerować opublikowany plik web.config :For projects that use a custom web.config file in the project root to generate their published web.config file:

  • W <handlers> pozycji, która dodaje moduł ASP.NET Core ( name="aspNetCore" ), Zmień modules wartość atrybutu z AspNetCoreModule na AspNetCoreModuleV2 .In the <handlers> entry that adds the ASP.NET Core Module (name="aspNetCore"), change the modules attribute value from AspNetCoreModule to AspNetCoreModuleV2.
  • W <aspNetCore> elemencie Dodaj atrybut model hostingu ( hostingModel="InProcess" ).In the <aspNetCore> element, add the hosting model attribute (hostingModel="InProcess").

Aby uzyskać więcej informacji i przykładowych plików web.config , zobacz Moduł ASP.NET Core .For more information and example web.config files, see Moduł ASP.NET Core.

Aktualizuj odwołania do pakietówUpdate package references

Jeśli celem jest .NET Core, Usuń atrybut odwołania pakietu Version w pliku projektu.If targeting .NET Core, remove the metapackage reference's Version attribute in the project file. Dołączenie Version atrybutu powoduje następujące ostrzeżenie:Inclusion of a Version attribute results in the following warning:

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

Aby uzyskać więcej informacji, zobacz Pakiet Microsoft. AspNetCore. App dla ASP.NET Core.For more information, see Pakiet Microsoft. AspNetCore. App dla ASP.NET Core.

Odwołanie do pakietu jest podobne do następującego <PackageReference /> węzła:The metapackage reference should resemble the following <PackageReference /> node:

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

W przypadku .NET Framework określania wartości docelowej należy zaktualizować atrybut odwołania każdego pakietu Version do 2.2.0 lub nowszego.If targeting .NET Framework, update each package reference's Version attribute to 2.2.0 or later. Poniżej znajdują się odwołania do pakietów w typowym .NET Framework projektu ASP.NET Core 2,2:Here are the package references in a typical ASP.NET Core 2.2 project targeting .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>

Jeśli odwołuje się do Microsoft. AspNetCore. Razor .. Pakiet projektu , zaktualizuj jego Version atrybut do 2.2.0 lub nowszego.If referencing the Microsoft.AspNetCore.Razor.Design package, update its Version attribute to 2.2.0 or later. Niewykonanie tej czynności spowoduje następujący błąd:Failure to do so results in the following error:

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.

Aktualizacja zestaw .NET Core SDK wersji w global.jsnaUpdate .NET Core SDK version in global.json

Jeśli rozwiązanie jest oparte na global.jsw pliku przeznaczonym dla konkretnej wersji zestaw .NET Core SDK, zaktualizuj jej version właściwość do wersji 2,2 zainstalowanej na maszynie:If your solution relies upon a global.json file to target a specific .NET Core SDK version, update its version property to the 2.2 version installed on your machine:

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

Ustawienia uruchamiania aktualizacjiUpdate launch settings

W przypadku używania Visual Studio Code należy zaktualizować plik ustawień uruchamiania projektu ( . programu vscode/launch.jswłączony ).If using Visual Studio Code, update the project's launch settings file ( .vscode/launch.json ). programŚcieżka powinna odwoływać się do nowego TFM:The program path should reference the new 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}"
        }
    ]
}

Aktualizuj konfigurację KestrelUpdate Kestrel configuration

Jeśli aplikacja wywołuje wywołanie UseKestrel CreateDefaultBuilder metody CreateWebHostBuilder Program klasy, należy wywołać ConfigureKestrel konfigurację serwera Kestrel, a nie UseKestrel w celu uniknięcia konfliktów z modelem hostingu w procesie usług IIS:If the app calls UseKestrel by calling CreateDefaultBuilder in the CreateWebHostBuilder method of the Program class, call ConfigureKestrel to configure Kestrel server instead of UseKestrel in order to avoid conflicts with the IIS in-process hosting model:

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

Jeśli aplikacja nie wywołuje CreateDefaultBuilder i nie kompiluje hosta ręcznie w Program klasie, wywołaj UseKestrel przed wywołaniem ConfigureKestrel :If the app doesn't call CreateDefaultBuilder and builds the host manually in the Program class, call UseKestrel before calling 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();
}

Aby uzyskać więcej informacji, zobacz Implementacja serwera sieci Web Kestrel w ASP.NET Core.For more information, see Implementacja serwera sieci Web Kestrel w ASP.NET Core.

Wersja zgodności aktualizacjiUpdate compatibility version

Zaktualizuj wersję zgodności w programie Startup.ConfigureServices do wersji Version_2_2 :Update the compatibility version in Startup.ConfigureServices to Version_2_2:

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

Aktualizowanie zasad CORSUpdate CORS policy

W ASP.NET Core 2,2 Oprogramowanie pośredniczące CORS reaguje ze źródłem symboli wieloznacznych ( * ), jeśli zasady umożliwiają dowolne źródło i zezwala na poświadczenia.In ASP.NET Core 2.2, the CORS middleware responds with a wildcard origin (*) if a policy allows any origin and allows credentials. Poświadczenia nie są obsługiwane, jeśli określono symbol wieloznaczny ( * ), a przeglądarki nie zablokują żądania CORS.Credentials aren't supported when a wildcard origin (*) is specified, and browsers will disallow the CORS request. Aby uzyskać więcej informacji, w tym opcje rozwiązywania problemu na kliencie, zobacz powiadomienia MDN Web docs.For more information, including options for correcting the problem on the client, see the MDN web docs.

Aby rozwiązać ten problem na serwerze, wykonaj jedną z następujących czynności:To correct this problem on the server, take one of the following actions:

  • Zmodyfikuj zasady CORS, aby nie zezwalać na poświadczenia.Modify the CORS policy to no longer allow credentials. Oznacza to, że należy usunąć wywołanie AllowCredentials podczas konfigurowania zasad.That is, remove the call to AllowCredentials when configuring the policy.
  • Jeśli aby żądanie CORS zakończyło się pomyślnie, należy zmodyfikować zasady, aby określić dozwolone hosty.If credentials are required for the CORS request to succeed, modify the policy to specify allowed hosts. Na przykład użyj builder.WithOrigins("https://api.example1.com", "https://example2.com") zamiast AllowAnyOrigin .For example, use builder.WithOrigins("https://api.example1.com", "https://example2.com") instead of using AllowAnyOrigin.

Aktualizowanie obrazów platformy DockerUpdate Docker images

W poniższej tabeli przedstawiono zmiany tagów obrazu platformy Docker:The following table shows the Docker image tag changes:

2.12.1 2.22.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

Zmień FROM linie w pliku dockerfile , aby użyć nowych tagów obrazu w kolumnie 2,2 poprzedniej tabeli.Change the FROM lines in your Dockerfile to use the new image tags in the preceding table's 2.2 column.

Kompiluj ręcznie w programie Visual Studio, gdy korzystasz z hostingu w procesie usług IISBuild manually in Visual Studio when using IIS in-process hosting

Środowisko żądania autokompilacji programu Visual Studio w przeglądarce nie działa z modelem hostingu w procesie usług IIS.Visual Studio's Auto build on browser request experience doesn't function with the IIS in-process hosting model. Należy ręcznie skompilować projekt podczas korzystania z hostingu w procesie.You must manually rebuild the project when using in-process hosting. Ulepszenia tego środowiska są planowane dla przyszłej wersji programu Visual Studio.Improvements to this experience are planned for a future release of Visual Studio.

Aktualizuj kod rejestrowaniaUpdate logging code

Zalecany kod konfiguracji rejestrowania nie zmienił się z 2,1 na 2,2, ale niektóre wzorce kodowania 1. x, które nadal pracowały w 2,1, nie działają już w 2,2.Recommended logging configuration code didn't change from 2.1 to 2.2, but some 1.x coding patterns that still worked in 2.1 no longer work in 2.2.

Jeśli aplikacja wykonuje zainicjowanie dostawcy rejestrowania, filtrowanie i ładowanie konfiguracji w Startup klasie, Przenieś ten kod do Program.Main :If your app does logging provider initialization, filtering, and configuration loading in the Startup class, move that code to Program.Main:

  • Inicjowanie dostawcy:Provider initialization:

    przykład 1. x:1.x example:

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

    2,2 przykład:2.2 example:

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

    przykład 1. x:1.x example:

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

    2,2 przykład:2.2 example:

    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)
                );
            })
            // ...
    }
    
  • Ładowanie konfiguracji:Configuration loading:

    przykład 1. x:1.x example:

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

    2,2 przykład:2.2 example:

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

Aby uzyskać więcej informacji, zobacz Rejestrowanie na platformie .NET Core i ASP.NET Core.For more information, see Rejestrowanie na platformie .NET Core i ASP.NET Core

Dodatkowe zasobyAdditional resources