Как использовать IApplicationBuilder и IServiceCollection при переходе с .NET Core 2.1 на .NET 4.7.1?

Мне пришлось изменить свой проект с .NET Core 2.1 на .NET 4.7.1, и я исправил почти все ошибки, кроме следующих, которые все еще ускользают от меня.

  • # P2 #
  • # P3 #
  • # P4 #
  • # P5 #
  • # P6 #
  • # P7 #
  • # P8 #
  • # P9 #

Я использую Microsoft.AspNetCore.Builder и Microsoft.Extensions.DependencyInjection. Что еще мне нужно использовать / установить / добавить, чтобы IApplicationBuilder и IServiceCollection работали?

В моем файле WebApi.csproj я изменил целевую структуру с netcoreapp2.1 на net471.

Старый:

<PropertyGroup>
  <TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>

Новый:

<PropertyGroup>
  <TargetFramework>net471</TargetFramework>
</PropertyGroup>

person Friso    schedule 27.07.2018    source источник
comment
Просто любопытно - у меня есть несколько проектов, построенных на net-core-2.1 (на самом деле, в основном это net-standard-2.0, а сборки точек входа - net-core-2.1) и работающих в Windows на net-4.7.1. Зачем вам его переносить? Разве ты не можешь просто запустить их? Приложение net core - это просто набор DLL, объединенных как nugets, не более особенный, чем newtonsoft.json / и т. д., тогда не должно возникнуть никаких проблем с запуском net471. Если размер имеет значение (netcoreapp довольно большой), вы можете пропустить сборку «все» и вручную выбрать определенные и уменьшить вес в несколько раз .. В чем тогда была проблема в вашем случае?   -  person quetzalcoatl    schedule 27.07.2018
comment
@Friso пакеты - это .NET Standard 2.0, поэтому их можно использовать в полной структуре. Вероятно, вам следует переместить свой код в библиотеки .NET Standard и оставить только необходимую конфигурацию для проектов, специфичных для среды выполнения.   -  person Panagiotis Kanavos    schedule 27.07.2018
comment
@Friso, кстати, сам ASP.NET Core не привязан к .NET Core. Вы также можете использовать его для сайтов с полной инфраструктурой, выбрав соответствующую среду выполнения при создании проекта веб-приложения. Возможно, вы также можете просто изменить netcoreapp2.0 на net471 в файле csproj. Я много использовал это с библиотеками классов, консольными проектами, но еще не с проектами ASP.NET Core.   -  person Panagiotis Kanavos    schedule 27.07.2018
comment
Я пытаюсь перейти с .NET Core 3.1 на .NET 4.7.2. как заменить HostBuilder.CreateDefaultBuilder в файле Program.cs?   -  person NAS    schedule 16.07.2021


Ответы (5)


Следуя ответу Рика, я поискал другие пакеты и обнаружил, что мне нужно добавить все следующие пакеты NuGet:

  • Microsoft.AspNetCore.Authentication
  • Microsoft.AspNetCore.Session
  • Microsoft.AspNetCore.HttpsPolicy
  • Microsoft.AspNetCore.CookiePolicy
  • Microsoft.AspNetCore.StaticFiles

После этого я больше не получал сообщений об ошибках.

person Friso    schedule 30.07.2018

Ошибки AddSession и UseAuthentication можно исправить с помощью следующих пакетов nuget.

  • Microsoft.AspNetCore.Session
  • Microsoft.AspNetCore.Authentication
person Rik    schedule 27.07.2018

Во-первых, переход на 4.7.1 - это не переход на более раннюю версию, а переход на другую платформу. То, что вам вероятно не нужно делать, если только вы не хотите повторно использовать код для приложения Winforms или WPF.

Пакеты Microsoft.Extensions. * Нацелены на .NET Standard 2.0, а не только на Core, поэтому вы также можете использовать их в полной платформе.

Пакеты и классы также не привязаны к ASP.NET, кроме хостинга. Использую их в консольных приложениях.

Это также означает, что если ваши библиотеки классов нацелены на .NET Standard 2.0, они могут использоваться обеими платформами без изменения целевого объекта. Возможно, вы могли бы переместить большую часть кода в библиотеки .NET Standard 2.0 и оставить только конфигурацию для проектов, специфичных для среды выполнения.

Вам не обязательно нужен хостинг для использования всех других расширений, хотя он предоставляет удобный API, аналогичный коду ASP.NET Core. Вы можете написать свой собственный класс Startup с помощью методов Configure и т. Д. И вызвать их явно. В конце концов, вам нужен доступ к IServiceCollection, чтобы вы могли получать настроенные службы и запускать их.

Вы можете добавить общий . NET с помощью пакета Microsoft.Extensions.Hosting. . Помимо общего API, он добавляет возможность размещать долго работающие службы для проектов, отличных от ASP.NET Core.

Это сообщение в блоге показывает, как вы можете использовать пакет Hosting для создания консольного приложения, которое запускает долго работающую службу, похожую на службу или демон Windows, например:

public static async Task Main(string[] args)
{
    var hostBuilder = new HostBuilder()
        .ConfigureServices((hostContext, services) =>
        {
            services.AddSingleton<IBusControl>(serviceProvider =>
            {
                return MassTransit.Bus.Factory.CreateUsingRabbitMq(cfg =>
                {
                    var host = cfg.Host(new Uri("rabbitmq://localhost"), h =>
                    {
                        h.Username("guest");
                        h.Password("guest");
                    });
                });
            });
            services.AddScoped<IHostedService, MassTransitHostedService>();
        });

    await hostBuilder.RunConsoleAsync();
}

Общий хост .NET дает более подробную информацию и показывает больше примеров ведения журнала, DI, конфигурации и т. д.

ОБНОВЛЕНИЕ

ASP.NET Core не привязан к .NET Core. Вы также можете использовать его в проектах Full Framework, просто изменив целевую среду выполнения в диалоговом окне создания проекта.

person Panagiotis Kanavos    schedule 27.07.2018

Установите Microsoft.AspNetCore.ResponseCaching из пакета nuget. Это может решить вашу проблему. После этого описанная функциональность будет доступна в рамках .net framework.

person piatkosia    schedule 04.02.2021

Попробуйте добавить Microsoft.aspNetCore.App в свой * .csproj файл, это должно решить проблему.

<ItemGroup>
    <FrameworkReference Include="Microsoft.aspNetCore.App" />
</ItemGroup>
person Mahmoud Zerini    schedule 09.07.2021