Udostępnij za pośrednictwem


Migrowanie z ASP.NET Core 2.1 do wersji 2.2

Autor: Scott Addie

W tym artykule wyjaśniono, jak zaktualizować istniejący projekt ASP.NET Core 2.1 w celu ASP.NET Core 2.2.

Wymagania wstępne

Ostrzeżenie

Jeśli używasz programu Visual Studio 2017, zobacz dotnet/sdk issue #3124 , aby uzyskać informacje o wersjach zestawu .NET Core SDK, które nie działają z programem Visual Studio.

Aktualizacja monikera platformy docelowej

Projekty przeznaczone dla platformy .NET Core powinny używać programu TFM wersji nowszej lub równej .NET Core 2.2. W pliku projektu zaktualizuj <TargetFramework> wewnętrzny tekst węzła za pomocą polecenia netcoreapp2.2:

<TargetFramework>netcoreapp2.2</TargetFramework>

Projekty przeznaczone dla programu .NET Framework mogą nadal używać programu TFM wersji nowszej lub równej programowi .NET Framework 4.6.1:

<TargetFramework>net461</TargetFramework>

Wdrażanie modelu hostingu procesów usług IIS

Aby wdrożyć model hostingu w procesie dla usług IIS, dodaj <AspNetCoreHostingModel> właściwość z wartością InProcess do <PropertyGroup> elementu w pliku projektu:

<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>

Model hostingu w procesie nie jest obsługiwany w przypadku aplikacji ASP.NET Core przeznaczonych dla platformy .NET Framework.

Aby uzyskać więcej informacji, zobacz Moduł ASP.NET Core Module (ANCM) dla usług IIS.

Aktualizowanie niestandardowego pliku web.config

W przypadku projektów używających niestandardowego pliku web.config w katalogu głównym projektu w celu wygenerowania opublikowanego pliku web.config :

  • W wpisie <handlers> , który dodaje moduł ASP.NET Core (name="aspNetCore"), zmień wartość atrybutu modules z AspNetCoreModule na AspNetCoreModuleV2.
  • W elemecie <aspNetCore> dodaj atrybut modelu hostingu (hostingModel="InProcess").

Aby uzyskać więcej informacji i przykładowych plików web.config, zobacz ASP.NET Core Module (ANCM) dla usług IIS.

Aktualizowanie odwołań do pakietów

W przypadku określania wartości docelowej dla platformy .NET Core usuń atrybut odwołania Version metapakiet w pliku projektu. Dołączenie atrybutu Version powoduje następujące ostrzeżenie:

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 Microsoft.AspNetCore.App metapakiet dla ASP.NET Core.

Odwołanie do pakietu metadanego powinno wyglądać podobnie do następującego <PackageReference /> węzła:

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

W przypadku określania Version wartości docelowej programu .NET Framework zaktualizuj atrybut odwołania do każdego pakietu do wersji 2.2.0 lub nowszej. Poniżej przedstawiono odwołania do pakietów w typowym projekcie ASP.NET Core 2.2 przeznaczonym dla platformy .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 elementu Microsoft.AspNetCore.Razor. Zaprojektuj pakiet, zaktualizuj jego Version atrybut do wersji 2.2.0 lub nowszej. Niepowodzenie w tym celu powoduje następujący błąd:

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.

Aktualizowanie wersji zestawu .NET Core SDK w programie global.json

Jeśli rozwiązanie opiera się na global.json pliku przeznaczonym dla określonej wersji zestawu .NET Core SDK, zaktualizuj jego version właściwość do wersji 2.2 zainstalowanej na maszynie:

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

Aktualizowanie ustawień uruchamiania

W przypadku korzystania z programu Visual Studio Code zaktualizuj plik ustawień uruchamiania projektu (.vscode/launch.json). Ścieżka program powinna odwoływać się do nowego serwera 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}"
        }
    ]
}

Aktualizowanie Kestrel konfiguracji

Jeśli aplikacja wywołuje wywołanie metody CreateDefaultBuilder CreateWebHostBuilder Program klasy , wywołaj metodę ConfigureKestrel , aby skonfigurować Kestrel serwer zamiast UseKestrel w celu uniknięcia konfliktów z modelem hostingu w procesie usług IIS:UseKestrel

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 kompiluje hosta ręcznie w Program klasie, przed wywołaniem metody ConfigureKestrelwywołaj metodę UseKestrel :

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 Kestrel serwer internetowy w programie ASP.NET Core.

Aktualizowanie wersji zgodności

Zaktualizuj wersję zgodności w pliku Startup.ConfigureServices na :Version_2_2

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

Aktualizowanie zasad MECHANIZMU CORS

W programie ASP.NET Core 2.2 oprogramowanie pośredniczące CORS odpowiada za pomocą źródła symboli wieloznacznych (*), jeśli zasady zezwalają na dowolne źródło i zezwalają na poświadczenia. Poświadczenia nie są obsługiwane, gdy określono źródło symboli wieloznacznych (*), a przeglądarki nie zezwalają na żądanie CORS. Aby uzyskać więcej informacji, w tym opcje rozwiązywania problemu na kliencie, zobacz dokumentację internetową usługi MDN.

Aby rozwiązać ten problem na serwerze, wykonaj jedną z następujących czynności:

  • Zmodyfikuj zasady MECHANIZMU CORS, aby nie zezwalać na poświadczenia. Oznacza to, że usuń wywołanie metody podczas AllowCredentials konfigurowania zasad.
  • Jeśli poświadczenia są wymagane do pomyślnego wykonania żądania CORS, zmodyfikuj zasady, aby określić dozwolone hosty. Na przykład użyj polecenia builder.WithOrigins("https://api.example1.com", "https://example2.com") zamiast polecenia AllowAnyOrigin.

Aktualizowanie obrazów platformy Docker

W poniższej tabeli przedstawiono zmiany tagu obrazu platformy Docker:

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

Zmień wiersze FROM w pliku Dockerfile , aby używać nowych tagów obrazów w poprzedniej kolumnie 2.2 tabeli.

Ręczne kompilowanie w programie Visual Studio podczas korzystania z hostingu w procesie usług IIS

Autokompilowanie w środowisku żądania przeglądarki programu Visual Studio nie działa z modelem hostingu procesów usług IIS. Należy ręcznie skompilować projekt podczas korzystania z hostingu w procesie. Ulepszenia tego środowiska są planowane w przyszłej wersji programu Visual Studio.

Aktualizowanie kodu rejestrowania

Zalecany kod konfiguracji rejestrowania nie zmienił się z wersji 2.1 na 2.2, ale niektóre wzorce kodowania 1.x, które nadal działały w wersji 2.1, nie działają już w wersji 2.2.

Jeśli aplikacja rejestruje inicjowanie dostawcy, filtrowanie i ładowanie konfiguracji w Startup klasie, przenieś ten kod na :Program.Main

  • Inicjowanie dostawcy:

    Przykład 1.x:

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

    2.2 przykład:

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

    Przykład 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 przykład:

    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:

    Przykład 1.x:

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

    2.2 przykład:

    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

ASP.NET Core Module (ANCM)

Jeśli moduł ASP.NET Core Module (ANCM) nie był wybranym składnikiem, gdy program Visual Studio został zainstalowany lub czy wcześniejsza wersja narzędzia ANCM została zainstalowana w systemie, pobierz najnowszy Instalator pakietu hostingowego platformy .NET Core (pobieranie bezpośrednie) i uruchom instalatora. Aby uzyskać więcej informacji, zobacz Hosting Bundle (Pakiet hostingu).

Dodatkowe zasoby