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
- Program Visual Studio 2019 z pakietem roboczym tworzenia aplikacji internetowych i ASP.NET
- Zestaw .NET Core SDK 2.2 lub nowszy
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ść atrybutumodules
zAspNetCoreModule
naAspNetCoreModuleV2
. - 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 ConfigureKestrel
wywoł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).