Microsoft.AspNetCore.*与Microsoft.Extensions.* NuGet包的区别及选型依据
核心决策逻辑主要围绕应用场景和功能需求展开,分三点说明:
看应用类型:Web场景选AspNetCore系列,通用场景选Extensions系列
如果是开发ASP.NET Core Web应用(比如MVC、Web API、Blazor),直接用Microsoft.AspNetCore.*包就对了。这类包是专门为Web场景定制的,比如Microsoft.AspNetCore.Hosting自带Web主机所需的HTTP管道、中间件集成等核心能力;Microsoft.AspNetCore.Http则提供Web请求响应的专属处理API,比如HttpContext、路由匹配这些只有Web场景才用得到的东西。
要是做非Web应用(控制台、Windows服务、桌面程序),或者写要在多类应用里复用的通用逻辑,就选Microsoft.Extensions.*。比如Microsoft.Extensions.Hosting是通用主机,支持后台服务、配置、日志这些跨场景的基础设施;Microsoft.Extensions.Http是通用的HTTP客户端工厂,在任何.NET应用里都能跑,不绑定Web环境。看是否需要Web专属能力
要是你的代码得直接和ASP.NET Core的Web管道打交道(比如写自定义中间件、处理Web请求上下文),必须用Microsoft.AspNetCore.*的对应包——Microsoft.Extensions.*的同类包只提供通用基础功能,没有Web特有的API,满足不了这类需求。
要是只需要通用的基础设施(配置、依赖注入、日志、HTTP客户端),还想让代码能在非Web环境复用,那就选Microsoft.Extensions.*,它的依赖更轻,不会带进来一堆没用的Web组件。看依赖轻量化需求
Microsoft.AspNetCore.*包一般会依赖更多Web相关组件,如果你的场景不需要这些,用Microsoft.Extensions.*能缩小程序的依赖体积,避免冗余模块被引入。
反过来,要是已经在Web项目里,用Microsoft.AspNetCore.*能更好地和ASP.NET Core框架集成,减少版本兼容的坑。
内容的提问来源于stack exchange,提问作者Bob Vandevliet

