代码之家  ›  专栏  ›  技术社区  ›  Friso

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

  •  5
  • Friso  · 技术社区  · 6 年前

    我不得不将我的项目从.NET Core 2.1改为.NET 4.7.1,并且我修复了几乎所有的错误,除了以下仍然无法解决的错误

    • “IApplicationBuilder”不包含“UseHsts”的定义,并且找不到接受“IApplicationBuilder”类型的第一个参数的扩展方法“UseHsts”(是否缺少using指令或程序集引用?)

    • “IApplicationBuilder”不包含“UseAuthentication”的定义,并且找不到接受“IApplicationBuilder”类型的第一个参数的扩展方法“UseAuthentication”(是否缺少using指令或程序集引用?)

    • “IApplicationBuilder”不包含“UseCookiePolicy”的定义,并且找不到接受“IApplicationBuilder”类型的第一个参数的扩展方法“UseCookiePolicy”(是否缺少using指令或程序集引用?)

    • “IApplicationBuilder”不包含“UseHttpsRedirection”的定义,并且找不到接受“IApplicationBuilder”类型的第一个参数的扩展方法“UseHttpsRedirection”(是否缺少using指令或程序集引用?)

    • “IApplicationBuilder”不包含“UseSession”的定义,并且找不到接受“IApplicationBuilder”类型的第一个参数的扩展方法“UseSession”(是否缺少using指令或程序集引用?)

    • “IApplicationBuilder”不包含“UseStaticFiles”的定义,并且找不到接受“IApplicationBuilder”类型的第一个参数的扩展方法“UseStaticFiles”(是否缺少using指令或程序集引用?)

    • “IServiceCollection”不包含“AddAuthentication”的定义,并且找不到接受“IServiceCollection”类型的第一个参数的扩展方法“AddAuthentication”(是否缺少using指令或程序集引用?)

    • “IServiceCollection”不包含“AddSession”的定义,并且找不到接受“IServiceCollection”类型的第一个参数的扩展方法“AddSession”(是否缺少using指令或程序集引用?)

    我在用 Microsoft.AspNetCore.Builder Microsoft.Extensions.DependencyInjection . 我还需要使用/install/add来获取 IApplicationBuilder IServiceCollection 去工作?

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

    旧版

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

    <PropertyGroup>
      <TargetFramework>net471</TargetFramework>
    </PropertyGroup>
    
    3 回复  |  直到 6 年前
        1
  •  20
  •   Friso    6 年前

    在瑞克的回答之后,我搜索了更多的包,发现我必须添加以下所有的NuGet包:

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

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

        2
  •  8
  •   Rik    6 年前

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

    • Microsoft.AspNetCore.Session会话
    • Microsoft.AspNetCore.Authentication验证
        3
  •  2
  •   Panagiotis Kanavos    6 年前

    首先,切换到4.7.1并不是降级,而是转移到另一个平台。一些你 可能 不需要这样做,除非您想为Winforms或WPF应用程序重用代码。

    Microsoft.Extensions.*包的目标是.NET Standard 2.0,而不仅仅是Core,因此您也可以在整个框架中使用它们。

    包和类也不绑定到ASP.NET,除了宿主。我正在控制台应用程序中使用它们。

    这还意味着,如果类库以.NET Standard 2.0为目标,则两个平台都可以使用它们,而不必更改目标。也许您可以将大部分代码移到.NET标准2.0库中,而只将配置留给特定于运行时的项目

    虽然它提供了一个类似于ASP.NET核心代码的方便的API,但您并不严格地需要宿主来使用所有其他扩展。您可以使用Configure etc方法编写自己的启动类并显式调用它们。最后,您需要的是访问IServiceCollection,以便您可以获得已配置的服务并运行它们。

    您可以添加 generic .NET host 通过使用 Microsoft.Exceptions.Hosting 包裹。除了常见的API之外,它还增加了将长时间运行的服务托管到非ASP.NET核心项目的能力。

    This blog post 显示如何使用宿主包创建控制台应用程序,该应用程序启动长时间运行的服务,类似于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核心 不是 与.NET核心绑定。您也可以在完整的框架项目中使用它,只需在“项目创建”对话框中更改目标运行时