Переход с ASP.NET Core 2.1 на 2.2
Автор: Скотт Адди (Scott Addie)
В этой статье объясняется, как обновить существующий проект ASP.NET Core 2.1 до ASP.NET Core 2.2.
Необходимые компоненты
- Visual Studio 2019 с рабочей нагрузкой ASP.NET и веб-разработка.
- .NET Core SDK 2.2 или более поздней версии.
Предупреждение
Если вы используете Visual Studio 2017, см. обсуждение dotnet/sdk issue #3124 для получения сведений о версиях пакета SDK для .NET Core, которые не работают с Visual Studio.
Обновление моникера целевой платформы (TFM)
Проекты, предназначенные для .NET Core, должны использовать TFM версии больше или равно .NET Core 2.2. В файле проекта обновите <TargetFramework>
внутренний текст узла следующим netcoreapp2.2
образом:
<TargetFramework>netcoreapp2.2</TargetFramework>
Проекты, предназначенные для платформа .NET Framework, могут продолжать использовать TFM версии больше или равно платформа .NET Framework 4.6.1:
<TargetFramework>net461</TargetFramework>
Внедрение модели размещения в процессе IIS
Чтобы внедрить модель размещения в процессе для IIS, добавьте <AspNetCoreHostingModel>
свойство со значением InProcess
<PropertyGroup>
в файл проекта:
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
Модель размещения в процессе не поддерживается для ASP.NET основных приложений, предназначенных для платформа .NET Framework.
Дополнительные сведения см. в разделе Модуль ASP.NET Core для IIS.
Обновление пользовательского файла конфигурации web.config
Для проектов, использующих пользовательский файл web.config в корневом каталоге проекта, чтобы создать опубликованный файл web.config :
<handlers>
В записи, которая добавляет модуль ядра ASP.NET (name="aspNetCore"
), измените значение атрибутаmodules
наAspNetCoreModule
AspNetCoreModuleV2
.- В элементе
<aspNetCore>
добавьте атрибут модели размещения (hostingModel="InProcess"
).
Дополнительные сведения и примеры файлов web.config см. в разделе ASP.NET Core Module (ANCM) для IIS.
Обновление ссылок на пакеты
Если вы используете .NET Core, удалите атрибут ссылки Version
на метапакет в файле проекта. Включение атрибута Version
приводит к следующему предупреждению:
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
Дополнительные сведения см. в разделе Microsoft.AspNetCore.App метапакет для ASP.NET Core.
Ссылка на метапакет должен выглядеть следующим <PackageReference />
узлом:
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
Если вы используете платформа .NET Framework, обновите атрибут каждой ссылки Version
на пакет до версии 2.2.0 или более поздней версии. Ниже приведены ссылки на пакеты в типичных проектах ASP.NET Core 2.2, предназначенных для платформа .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>
При ссылке на Microsoft.AspNetCore.Razor. Проектируйте пакет, обновите его Version
атрибут до версии 2.2.0 или более поздней версии. Сбой этого приводит к следующей ошибке:
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.
Обновление версии пакета SDK для .NET Core в global.json
Если решение использует global.json файл для целевой версии пакета SDK для .NET Core, обновите его version
свойство до версии 2.2, установленной на компьютере:
{
"sdk": {
"version": "2.2.100"
}
}
Обновление параметров запуска
При использовании Visual Studio Code обновите файл параметров запуска проекта (.vscode/launch.json
). program
Путь должен ссылаться на новый 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 конфигурации
Если приложение вызывается UseKestrel путем вызова CreateDefaultBuilder
в методе Program
CreateWebHostBuilder класса, вызовите ConfigureKestrel
настройку Kestrel сервера вместо UseKestrel
того, чтобы избежать конфликтов с моделью размещения в процессе IIS:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureKestrel((context, options) =>
{
// Set properties and call methods on options
});
Если приложение не вызывает CreateDefaultBuilder
и создает узел вручную в Program
классе, вызовите UseKestrel перед вызовом: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();
}
Дополнительные сведения см Kestrel . на веб-сервере в ASP.NET Core.
Обновление версии совместимости
Обновите версию совместимости в Startup.ConfigureServices
Version_2_2
следующих версиях:
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
Обновление политики CORS
В ASP.NET Core 2.2 ПО промежуточного слоя CORS отвечает с подстановочными знаками (*
), если политика разрешает любой источник и разрешает учетные данные. Учетные данные не поддерживаются при указании источника подстановочных знаков (*
), а браузеры запретят запрос CORS. Дополнительные сведения, включая варианты исправления проблемы на клиенте, см. в веб-документации MDN.
Чтобы устранить эту проблему на сервере, выполните одно из следующих действий:
- Измените политику CORS, чтобы больше не разрешать учетные данные. То есть удалите вызов AllowCredentials при настройке политики.
- Если учетные данные необходимы для успешного запроса CORS, измените политику, чтобы указать разрешенные узлы. Например, используйте
builder.WithOrigins("https://api.example1.com", "https://example2.com")
вместо использования AllowAnyOrigin.
Обновление образов Docker
В следующей таблице показаны изменения тега образа 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 |
Измените FROM
строки в Dockerfile , чтобы использовать новые теги изображений в столбце 2.2 предыдущей таблицы.
Создание вручную в Visual Studio при использовании внутрипроцессного размещения СЛУЖБ IIS
Автоматическая сборка Visual Studio на основе интерфейса запроса браузера не работает с моделью размещения в процессе IIS. При использовании внутрипроцессного размещения необходимо вручную перестроить проект. Улучшения этого интерфейса планируется в будущем выпуске Visual Studio.
Обновление кода ведения журнала
Рекомендуемый код конфигурации ведения журнала не изменился с версии 2.1 до 2.2, но некоторые шаблоны программирования 1.x, которые по-прежнему работали в версии 2.1, больше не работают в 2.2.
Если приложение выполняет инициализацию, фильтрацию и загрузку Startup
конфигурации в классе, переместите этот код в Program.Main
следующее:
Инициализация поставщика:
Пример 1.x:
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(); }
Пример 2.2.
public static void Main(string[] args) { var webHost = new WebHostBuilder() // ... .ConfigureLogging((hostingContext, logging) => { logging.AddConsole(); }) // ... }
Фильтрация:
Пример 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.
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) ); }) // ... }
Загрузка конфигурации:
Пример 1.x:
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(Configuration); }
Пример 2.2.
public static void Main(string[] args) { var webHost = new WebHostBuilder() // ... .ConfigureLogging((hostingContext, logging) => { logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging")); logging.AddConsole(); }) // ... }
Дополнительные сведения см. в статье Ведение журнала в .NET Core и ASP.NET Core.
модуль ASP.NET Core (ANCM)
Если модуль ASP.NET Core (ANCM) не был выбранным компонентом при установке Visual Studio или если в системе установлена предварительная версия ANCM, скачайте последнюю версию установщика пакета размещения .NET Core (прямая загрузка) и запустите установщик. Дополнительные сведения см. в разделе "Пакет размещения".
Дополнительные ресурсы
ASP.NET Core