Migrace z ASP.NET Core 2.1 na 2.2
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
- Visual Studio 2019 s úlohou vývoje ASP.NET a webu
- .NET Core SDK 2,2 nebo novější
Upozornění
Pokud používáte sadu Visual Studio 2017, přečtěte si článek dotnet/SDK výdeje #3124 pro informace o .NET Core SDK verzích, 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, která je větší nebo rovna .NET Core 2.2. V souboru projektu aktualizujte <TargetFramework> vnitřní text uzlu pomocí netcoreapp2.2 :
<TargetFramework>netcoreapp2.2</TargetFramework>
Projekty cílené .NET Framework mohou nadále používat TFM verze větší nebo rovny .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í vprocesu pro službu IIS, přidejte vlastnost s hodnotou do v souboru <AspNetCoreHostingModel> InProcess <PropertyGroup> projektu:
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
Model hostování v procesu není podporovaný pro aplikace, ASP.NET Core cílí na .NET Framework.
Další informace naleznete v tématu Modul ASP.NET Core.
Aktualizace vlastního web.config souborů
Pro projekty, které používají vlastní souborweb.config v kořenovém adresáři projektu k vygenerování publikovanéhoweb.config souboru:
- V
<handlers>položce, která přidá ASP.NET Core Module (name="aspNetCore"), změňtemoduleshodnotu atributu z naAspNetCoreModuleAspNetCoreModuleV2. - V
<aspNetCore>elementu přidejte atribut modelu hostování (hostingModel="InProcess").
Další informace a příklad souborů web.config najdete v tématu Modul ASP.NET Core .
Aktualizace odkazů na balíček
Pokud cílíte na .NET Core, odeberte atribut odkazu metapackage Version v souboru projektu. Zahrnutí Version atributu vede k následujícímu 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 naleznete v tématu Microsoft.AspNetCore.App metabalíček pro ASP.NET Core.
Odkaz na metabalíčky by se měl podobat následujícímu <PackageReference /> uzlu:
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
Pokud cílíte .NET Framework, aktualizujte atribut každého odkazu na balíček na Version 2.2.0 nebo novější. Tady jsou odkazy na balíček v typickém projektu ASP.NET Core 2.2, který cílí .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 . Navrhovat balíček, Version aktualizovat jeho atribut na 2.2.0 nebo novější. Pokud to nepokusí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 .NET Core SDK verze v global.json
Pokud vaše řešení při cílení na konkrétní verzi .NET Core SDK spoléhá na souborglobal.js, aktualizujte jeho vlastnost na verzi version 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á metodu v metodě UseKestrel CreateDefaultBuilder CreateWebHostBuilder třídy , voláním metody nakonfigurujte Program ConfigureKestrel Kestrel server UseKestrel místo , aby nedocházelo ke konfliktům s modelem hostování v procesu služby IIS :
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureKestrel((context, options) =>
{
// Set properties and call methods on options
});
Pokud aplikace nevolá a sestaví hostitele ručně ve třídě CreateDefaultBuilder Program , volejte před UseKestrel voláním ConfigureKestrel metody :
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 naleznete v tématu Kestrelimplementace webového serveru v ASP.NET Core.
Aktualizace verze kompatibility
Aktualizujte verzi kompatibility v Startup.ConfigureServices souboru na Version_2_2 :
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
Aktualizace zásad CORS
V ASP.NET Core 2.2 middleware CORS odpoví zástupným znakem origin ( ), pokud zásady umožňují jakýkoli původ * a umožňují přihlašovací údaje. Přihlašovací údaje nejsou podporované, pokud je zadaný zástupný znak původu ( ) a prohlížeče zak * nebudou požadavek CORS zakažovat. Další informace, včetně možností pro opravu problému na klientovi, najdete v dokumentu webu MDN.
Pokud chcete tento problém na serveru vyřešit, udělejte jednu z následujících akcí:
- Upravte zásady CORS tak, aby už nepovolely přihlašovací údaje. To znamená, že při AllowCredentials konfiguraci zásad odeberte volání .
- Pokud jsou pro úspěšný požadavek CORS vyžadovány přihlašovací údaje, upravte zásadu tak, aby specifikovat povolené hostitele. Použijte například místo
builder.WithOrigins("https://api.example1.com", "https://example2.com")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 |
Změňte řádky v souboru Dockerfile tak, aby se ve sloupci FROM 2.2 předchozí tabulky používají nové značky image.
Ruční sestavení v Visual Studio při hostování v procesu služby IIS
Visual Studio rozhraní pro automatické sestavování požadavků prohlížeče nefunguje s modelem hostování v procesu služby IIS. Při hostování v procesu je nutné projekt znovu ručně sestavit. Vylepšení tohoto prostředí se plánuje na budoucí verzi Visual Studio.
Aktualizace kódu protokolování
Doporučený kód konfigurace protokolování se mezi 2.1 a 2.2 nemění, ale některé vzory kódování 1.x, které stále fungovaly ve standardu 2.1, už ve 2.2 nefungují.
Pokud vaše aplikace ve třídě inicializační, filtrovací a konfigurační načítání zprostředkovatele protokolování Startup zachytá, 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(); }Příklad 2.2:
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); }Příklad 2.2:
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); }Příklad 2.2:
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.