从 .NET Core 2.1 降级到 .NET 4.7.1 时如何使用 IApplicationBuilder 和 IServiceCollection?

How to use IApplicationBuilder and IServiceCollection when downgrading from .NET Core 2.1 to .NET 4.7.1?

我不得不将我的项目从 .NET Core 2.1 更改为 .NET 4.7.1,并且我修复了几乎所有错误,但以下错误仍然困扰着我

我正在使用 Microsoft.AspNetCore.BuilderMicrosoft.Extensions.DependencyInjection。 use/install/add 我还需要什么才能让 IApplicationBuilderIServiceCollection 工作?

在我的 WebApi.csproj 文件中,我将目标框架从 netcoreapp2.1 更改为 net471。

旧:

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

新:

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

首先,切换到 4.7.1 并不是降级,而是转移到不同的平台。您可能不需要做的事情,除非您想要将代码重新用于 Winforms 或 WPF 应用程序。

Microsoft.Extensions.* 包针对 .NET Standard 2.0,而不仅仅是 Core,因此您也可以在 Full 框架中使用它们。

包和 classes 也不绑定到 ASP.NET,除了托管。我在控制台应用程序中使用它们。

这也意味着,如果您的 class 库以 .NET Standard 2.0 为目标,则无需更改目标即可在两个平台上使用它们。或许您可以将大部分代码移至 .NET Standard 2.0 库,而仅将配置留给 运行 特定时间的项目

虽然它确实提供了一个方便的 API 类似于 ASP.NET 核心代码,但您并不严格需要托管才能使用所有其他扩展。您可以使用 Configure 等方法编写自己的 Startup class 并显式调用它们。最后,您需要访问 IServiceCollection,这样您就可以获得配置的服务和 运行 它们。

您可以添加一个 generic .NET host by using the Microsoft.Extensions.Hosting 包。除了常见的 API 之外,它还增加了为非 ASP.NET 核心项目托管长期 运行ning 服务的能力。

This blog post 展示了如何使用 Hosting 包创建一个控制台应用程序来启动一个 long-运行ning 服务,类似于 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 Generic Host 更加详细,并显示了更多日志记录、DI、配置等示例。

更新

ASP.NET Core 绑定到 .NET Core。您也可以在完整框架项目中使用它,只需在项目创建对话框

中更改目标 运行time

可以使用以下 nuget 包修复 'AddSession' 和 'UseAuthentication' 错误。

  • Microsoft.AspNetCore.Session
  • Microsoft.AspNetCore.Authentication

根据 Rik 的回答,我搜索了更多包,发现我必须添加以下所有 NuGet 包:

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

在我这样做之后,我没有再收到错误消息。

请从 nuget 包安装 Microsoft.AspNetCore.ResponseCaching。它可以解决您的问题。之后描述的功能将在 .net 框架下可用。

尝试将“Microsoft.aspNetCore.App”添加到您的 *.csproj 文件中,这应该可以解决问题。

<ItemGroup>
    <FrameworkReference Include="Microsoft.aspNetCore.App" />
</ItemGroup>