Migrieren von ASP.net Core 2,1 zu 2,2Migrate from ASP.NET Core 2.1 to 2.2

Von Scott AddieBy Scott Addie

In diesem Artikel wird erläutert, wie ein vorhandenes ASP.net Core 2,1-Projekt auf ASP.net Core 2,2 aktualisiert wird.This article explains how to update an existing ASP.NET Core 2.1 project to ASP.NET Core 2.2.

VoraussetzungenPrerequisites

Warnung

Wenn Sie Visual Studio 2017 verwenden, finden Sie unter dotnet/sdk issue #3124 Informationen zu .NET Core SDK-Versionen, die nicht mit Visual Studio verwendet werden können.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.

Aktualisieren des Zielframeworkmonikers (Target Framework Moniker, TFM)Update Target Framework Moniker (TFM)

Für Projekte, die auf .net Core abzielen, sollte der TFM einer Version größer oder gleich .net Core 2,2 verwendet werden.Projects targeting .NET Core should use the TFM of a version greater than or equal to .NET Core 2.2. Aktualisieren Sie in der Projektdatei den <TargetFramework> inneren Text des Knotens wie folgt netcoreapp2.2 :In the project file, update the <TargetFramework> node's inner text with netcoreapp2.2:

<TargetFramework>netcoreapp2.2</TargetFramework>

Projekte, die auf .NET Framework abzielen, verwenden möglicherweise weiterhin den TFM einer Version, die größer oder gleich .NET Framework 4.6.1 ist: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>

Übernehmen des in-Process-Hostingmodells von IISAdopt the IIS in-process hosting model

Um das in-Process-Hostingmodell für IISzu übernehmen, fügen Sie die- <AspNetCoreHostingModel> Eigenschaft mit dem Wert InProcess zu einem <PropertyGroup> in der Projektdatei hinzu: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>

Das in-Process-Hostingmodell wird nicht für ASP.net Core Apps unterstützt, die auf .NET Framework abzielenThe in-process hosting model isn't supported for ASP.NET Core apps targeting .NET Framework.

Weitere Informationen finden Sie unter ASP.NET Core-Modul.For more information, see ASP.NET Core-Modul.

Aktualisieren einer benutzerdefinierten web.config DateiUpdate a custom web.config file

Für Projekte, die eine benutzerdefinierte web.config Datei im Projektstamm verwenden, um Ihre veröffentlichte web.config Datei zu generieren:For projects that use a custom web.config file in the project root to generate their published web.config file:

  • <handlers>Ändern Sie im Eintrag, der das ASP.net Core Modul ( name="aspNetCore" ) hinzufügt, den- modules Attribut Wert von AspNetCoreModule in AspNetCoreModuleV2 .In the <handlers> entry that adds the ASP.NET Core Module (name="aspNetCore"), change the modules attribute value from AspNetCoreModule to AspNetCoreModuleV2.
  • <aspNetCore>Fügen Sie im-Element das hostingmodellattribut ( hostingModel="InProcess" ) hinzu.In the <aspNetCore> element, add the hosting model attribute (hostingModel="InProcess").

Weitere Informationen und Beispiel web.config Dateien finden Sie unter ASP.NET Core-Modul .For more information and example web.config files, see ASP.NET Core-Modul.

Aktualisieren von PaketverweisenUpdate package references

Wenn .net Core als Ziel verwendet wird, entfernen Sie das-Attribut des metapaketverweises Version in der Projektdatei.If targeting .NET Core, remove the metapackage reference's Version attribute in the project file. Die Einbindung eines- Version Attributs führt zu folgender Warnung: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

Weitere Informationen finden Sie unter Microsoft.AspNetCore.App-Metapaket für ASP.NET Core.For more information, see Microsoft.AspNetCore.App-Metapaket für ASP.NET Core.

Der metapaketverweis sollte dem folgenden <PackageReference /> Knoten ähneln:The metapackage reference should resemble the following <PackageReference /> node:

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

Wenn Sie auf .NET Framework abzielen, aktualisieren Sie das Attribut jedes Paket Verweises Version auf 2.2.0 oder höher.If targeting .NET Framework, update each package reference's Version attribute to 2.2.0 or later. Im folgenden finden Sie die Paket Verweise in einem typischen ASP.net Core 2,2-Projekt, das auf .NET Framework abzielt: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>

Bei verweisen auf Microsoft. aspnetcore. Razor Paket entwerfen , aktualisieren Sie das zugehörige Version Attribut in 2.2.0 oder höher.If referencing the Microsoft.AspNetCore.Razor.Design package, update its Version attribute to 2.2.0 or later. Wenn dies nicht der Fall ist, führt dies zu folgendem Fehler: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.

Aktualisieren der .NET Core SDK-Version in „global.json“Update .NET Core SDK version in global.json

Wenn Ihre Lösung auf eine global.js Datei basiert, die auf eine bestimmte .net Core SDK Version ausgerichtet ist, aktualisieren Sie Ihre- version Eigenschaft auf die Version 2,2, die auf Ihrem Computer installiert ist: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"
  }
}

Start Einstellungen aktualisierenUpdate launch settings

Wenn Sie Visual Studio Code verwenden, aktualisieren Sie die Datei mit den Start Einstellungen des Projekts (vscode/launch.json).If using Visual Studio Code, update the project's launch settings file (.vscode/launch.json). Der program Pfad sollte auf den neuen TFM verweisen: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}"
        }
    ]
}

Kestrel-Konfiguration aktualisierenUpdate Kestrel configuration

Wenn die APP aufruft UseKestrel , indem CreateDefaultBuilder Sie in der createwebhostbuilder-Methode der- Program Klasse aufruft, rufen Sie auf, um den ConfigureKestrel Kestrel-Server anstelle von zu konfigurieren, um UseKestrel Konflikte mit dem Prozess internen IIS-Hostingmodellzu vermeiden: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
        });

Wenn die APP nicht aufruft CreateDefaultBuilder und den Host manuell in der- Program Klasse erstellt, rufen Sie UseKestrel vor dem Aufrufen von auf 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();
}

Weitere Informationen finden Sie unter Implementierung des Webservers Kestrel in ASP.NET Core.For more information, see Implementierung des Webservers Kestrel in ASP.NET Core.

Kompatibilitäts Version aktualisierenUpdate compatibility version

Aktualisieren Sie die Kompatibilitäts Version in Startup.ConfigureServices auf Version_2_2 :Update the compatibility version in Startup.ConfigureServices to Version_2_2:

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

Aktualisieren der cors-RichtlinieUpdate CORS policy

In ASP.net Core 2,2 antwortet die cors-Middleware mit einem Platzhalter Ursprung ( * ), wenn eine Richtlinie einen beliebigen Ursprung zulässt und Anmelde Informationen zulässt.In ASP.NET Core 2.2, the CORS middleware responds with a wildcard origin (*) if a policy allows any origin and allows credentials. Anmelde Informationen werden nicht unterstützt, wenn ein Platzhalter Ursprung ( * ) angegeben wird, und Browser die cors-Anforderung nicht zulassen.Credentials aren't supported when a wildcard origin (*) is specified, and browsers will disallow the CORS request. Weitere Informationen, einschließlich der Optionen zum Beheben des Problems auf dem Client, finden Sie in der MDN-Webdokumentation.For more information, including options for correcting the problem on the client, see the MDN web docs.

Um dieses Problem auf dem Server zu beheben, führen Sie eine der folgenden Aktionen aus:To correct this problem on the server, take one of the following actions:

  • Ändern Sie die cors-Richtlinie, um keine Anmelde Informationen mehr zuzulassen.Modify the CORS policy to no longer allow credentials. Das heißt, entfernen Sie den-Befehl, AllowCredentials Wenn Sie die Richtlinie konfigurieren.That is, remove the call to AllowCredentials when configuring the policy.
  • Wenn Anmelde Informationen erforderlich sind, damit die cors-Anforderung erfolgreich ist, ändern Sie die Richtlinie so, dass zulässige Hosts angegeben werden.If credentials are required for the CORS request to succeed, modify the policy to specify allowed hosts. Verwenden builder.WithOrigins("https://api.example1.com", "https://example2.com") Sie z. b. anstelle AllowAnyOrigin von.For example, use builder.WithOrigins("https://api.example1.com", "https://example2.com") instead of using AllowAnyOrigin.

Aktualisieren von Docker-ImagesUpdate Docker images

In der folgenden Tabelle sind die Docker-Image-tagänderungen aufgeführt: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

Ändern Sie die FROM Zeilen in der dockerfile-Datei so, dass die neuen Bildtags in der 2,2-Spalte der vorangehenden Tabelle verwendet werden.Change the FROM lines in your Dockerfile to use the new image tags in the preceding table's 2.2 column.

Manuelles Erstellen in Visual Studio bei Verwendung des IIS-in-Process-HostingBuild manually in Visual Studio when using IIS in-process hosting

Die automatische Build-Anforderung von Visual Studio auf Browser Anforderungen funktioniert nicht mit dem in-Process-Hostingmodell von IIS.Visual Studio's Auto build on browser request experience doesn't function with the IIS in-process hosting model. Sie müssen das Projekt bei der Verwendung von in-Process-Hosting manuell neu erstellen.You must manually rebuild the project when using in-process hosting. Verbesserungen an dieser Umgebung sind für eine zukünftige Version von Visual Studio geplant.Improvements to this experience are planned for a future release of Visual Studio.

Protokollierungs Code aktualisierenUpdate logging code

Der empfohlene Protokollierungs Konfigurations Code hat sich nicht von 2,1 zu 2,2 geändert, aber einige 1. x-Codierungs Muster, die weiterhin in 2,1 funktionieren, funktionieren nicht mehr in 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.

Wenn Ihre APP die Initialisierung, Filterung und Konfiguration von Anbietern in der-Klasse protokolliert, verschieben Sie den folgenden Startup Code in Program.Main :If your app does logging provider initialization, filtering, and configuration loading in the Startup class, move that code to Program.Main:

  • Anbieter Initialisierung:Provider initialization:

    1. x-Beispiel:1.x example:

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

    2,2 Beispiel:2.2 example:

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

    1. x-Beispiel: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 Beispiel: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)
                );
            })
            // ...
    }
    
  • Das Laden der Konfiguration:Configuration loading:

    1. x-Beispiel:1.x example:

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

    2,2 Beispiel:2.2 example:

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

Weitere Informationen finden Sie unter Protokollieren in .NET Core und ASP.NET Core.For more information, see Protokollieren in .NET Core und ASP.NET Core

Weitere RessourcenAdditional resources