首页 文章

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

提问于
浏览
0

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

  • 'IApplicationBuilder'不包含'UseHsts'的定义,也没有扩展方法'UseHsts'接受类型'IApplicationBuilder'的第一个参数(你是否缺少using指令或汇编引用?)

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

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

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

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

  • 'IApplicationBuilder'不包含'UseStaticFiles'的定义,也没有扩展方法'UseStaticFiles'接受类型'IApplicationBuilder'的第一个参数(你是否缺少using指令或汇编引用?)

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

  • 'IServiceCollection'不包含'AddSession'的定义,并且没有扩展方法'AddSession'可以找到接受类型'IServiceCollection'的第一个参数(你是否缺少using指令或汇编引用?)

我正在使用 Microsoft.AspNetCore.BuilderMicrosoft.Extensions.DependencyInjection . 我需要使用/安装/添加什么来让 IApplicationBuilderIServiceCollection 工作?

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

旧:

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

新:

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

3 回答

  • 1

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

    • Microsoft.AspNetCore.Authentication

    • Microsoft.AspNetCore.Session

    • Microsoft.AspNetCore.HttpsPolicy

    • Microsoft.AspNetCore.CookiePolicy

    • Microsoft.AspNetCore.StaticFiles

    在我这样做后,我没有收到任何错误消息 .

  • 2

    首先,切换到4.7.1 isn 't downgrading, it' s移动到不同的平台 . 您可能不需要做的事情,除非您想重用Winforms或WPF应用程序的代码 .

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

    除托管外,包和类也与ASP.NET无关 . 我在控制台应用程序中使用它们 .

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

    您并不需要托管来使用所有其他扩展,尽管它确实提供了类似于ASP.NET Core代码的方便API . 您可以使用Configure etc方法编写自己的Startup类并显式调用它们 . 最后,您需要访问IServiceCollection,以便获得配置的服务并运行它们 .

    您可以使用Microsoft.Exceptions.Hosting包添加generic .NET host . 除了通用API之外,它还增加了向非ASP.NET核心项目托管长期运行服务的能力 .

    This blog post显示了如何使用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 Generic Host详细介绍了日志,DI,配置等的更多示例 .

    UPDATE

    ASP.NET Core is not 与.NET Core绑定 . 您也可以在Full Framework项目中使用它,只需在Project creationg对话框中更改目标运行时即可

  • 6

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

    • Microsoft.AspNetCore.Session

    • Microsoft.AspNetCore.Authentication

相关问题