Migrace z ASP.NET Core 2.1 na 2.2
Autor: 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 pro ASP.NET a web
- .NET Core SDK 2.2 nebo novější
Upozorňující
Pokud používáte Visual Studio 2017, přečtěte si téma dotnet/sdk problém č. 3124 , kde najdete informace o verzích sady .NET Core SDK, 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 větší nebo rovno .NET Core 2.2. V souboru projektu aktualizujte <TargetFramework>
vnitřní text uzlu pomocí netcoreapp2.2
:
<TargetFramework>netcoreapp2.2</TargetFramework>
Projekty, které cílí na rozhraní .NET Framework, můžou nadále používat TFM verze vyšší nebo rovny rozhraní .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í v procesu pro službu IIS, přidejte <AspNetCoreHostingModel>
vlastnost s hodnotou InProcess
do <PropertyGroup>
souboru projektu:
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
Model hostování v procesu se nepodporuje pro aplikace ASP.NET Core, které cílí na rozhraní .NET Framework.
Další informace najdete v tématu Modul ASP.NET Core (ANCM) pro službu IIS.
Aktualizace vlastního souboru web.config
Pro projekty, které používají vlastní soubor web.config v kořenovém adresáři projektu k vygenerování publikovaného souboru web.config :
<handlers>
V položce, která přidá ASP.NET Core Module (name="aspNetCore"
), změňte hodnotu atributumodules
zAspNetCoreModule
naAspNetCoreModuleV2
.- V elementu
<aspNetCore>
přidejte atribut modelu hostování (hostingModel="InProcess"
).
Další informace a ukázkové soubory web.config najdete v tématu ASP.NET Základní modul (ANCM) pro službu IIS.
Aktualizace odkazů na balíčky
Pokud cílíte na .NET Core, odeberte atribut odkazu Version
metabalíku v souboru projektu. Zahrnutí atributu Version
má za následek následující 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 najdete v tématu Microsoft.AspNetCore.App metabalíku pro ASP.NET Core.
Odkaz na metabalír by měl vypadat podobně jako na následujícím <PackageReference />
uzlu:
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
Pokud cílíte na rozhraní .NET Framework, aktualizujte atribut odkazu Version
na každý balíček na verzi 2.2.0 nebo novější. Tady jsou odkazy na balíčky v typickém projektu ASP.NET Core 2.2, který cílí na rozhraní .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. Balíček návrhu aktualizujte jeho Version
atribut na verzi 2.2.0 nebo novější. Pokud to neudělá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 verze sady .NET Core SDK v global.json
Pokud vaše řešení spoléhá na global.json soubor, který cílí na konkrétní verzi sady .NET Core SDK, aktualizujte jeho version
vlastnost na verzi 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á voláním metody CreateWebHostBuilder Program
třídy, volání ConfigureKestrel
konfigurace Kestrel serveru místo UseKestrel
aby nedocházelo ke konfliktům s modelem hostování v procesu služby IIS:CreateDefaultBuilder
UseKestrel
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureKestrel((context, options) =>
{
// Set properties and call methods on options
});
Pokud aplikace nevolá CreateDefaultBuilder
a sestaví hostitele ručně ve Program
třídě, zavolejte UseKestrel před voláním 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();
}
Další informace najdete Kestrel na webovém serveru v ASP.NET Core.
Aktualizace verze kompatibility
Aktualizujte verzi Startup.ConfigureServices
kompatibility na Version_2_2
:
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
Aktualizace zásad CORS
V ASP.NET Core 2.2 odpoví middleware CORS zástupným znakem (*
), pokud zásada povolí jakýkoli zdroj a povolí přihlašovací údaje. Přihlašovací údaje nejsou podporovány, pokud je zadaný zástupný znak (*
) a prohlížeče nepovolí žádost CORS. Další informace, včetně možností opravy problému na klientovi, najdete ve webové dokumentaci MDN.
Chcete-li tento problém opravit na serveru, proveďte jednu z následujících akcí:
- Upravte zásady CORS tak, aby už nepovolily přihlašovací údaje. To znamená, že při konfiguraci zásad odeberte volání AllowCredentials .
- Pokud jsou pro úspěšný požadavek CORS vyžadovány přihlašovací údaje, upravte zásadu tak, aby určila povolené hostitele. Například použijte
builder.WithOrigins("https://api.example1.com", "https://example2.com")
místo použití 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 |
FROM
Změňte řádky v souboru Dockerfile tak, aby používaly nové značky imagí ve sloupci 2.2 předchozí tabulky.
Ruční sestavení v sadě Visual Studio při hostování v procesu služby IIS
Automatické sestavení sady Visual Studio v prostředí žádostí o prohlížeč nefunguje s modelem hostování v procesu služby IIS. Pokud používáte hostování v procesu, musíte projekt ručně znovu sestavit. Vylepšení tohoto prostředí se plánují pro budoucí vydání sady Visual Studio.
Aktualizace kódu protokolování
Doporučený konfigurační kód protokolování se nezměnil z verze 2.1 na 2.2, ale některé vzory kódování 1.x, které stále fungovaly ve verzi 2.1, už nefungují ve verzi 2.2.
Pokud vaše aplikace inicializaci, filtrování a načítání konfigurace zprostředkovatele protokolování ve Startup
třídě provede, 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(); }
2.2 příklad:
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); }
2.2 příklad:
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); }
2.2 příklad:
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
modul ASP.NET Core (ANCM)
Pokud ASP.NET Core Module (ANCM) nebyla vybraná komponenta při instalaci sady Visual Studio nebo pokud byla v systému nainstalována předchozí verze ANCM, stáhněte si nejnovější instalační program balíčku hostingu .NET Core (přímý stažení) a spusťte instalační program. Další informace naleznete v tématu Hosting Bundle.