Clean架构下为何Web_API未间接引用Microsoft.EntityFrameworkCore.Tools?
问题分析与解答
核心原因:开发依赖包的传递限制
你遇到的问题本质是NuGet开发依赖包的传递引用规则导致的:
- Microsoft.EntityFrameworkCore.Design属于开发时依赖(Development Dependency),这类包在NuGet默认配置中,不会通过项目引用传递给上层项目(也就是Web_API不会自动间接引用到Infrastructure里的这个包)。
- 对比普通运行时依赖包(比如Microsoft.EntityFrameworkCore),它们会顺着项目引用链(Domain→Application→Infrastructure→Web_API)自动传递,所以不用在Web_API单独安装也能正常使用,但开发依赖包的设计逻辑就是只作用于安装它的项目的开发环境,不会向上传递。
EF Core工具的运行要求
Update-Database这类EF Core命令行工具的运行逻辑是:
- 以你指定的
-StartupProject(Web_API)作为执行环境 - 工具需要在启动项目中找到Microsoft.EntityFrameworkCore.Design提供的设计时服务入口
- 它不会遍历依赖项目的开发依赖包,只会检查启动项目本身是否安装了该包,所以即使Infrastructure里装了,Web_API没装的话就会报错。
你的解决方案是合理的
在Web_API项目中直接安装Microsoft.EntityFrameworkCore.Design是官方推荐的解决方案之一,除此之外你也可以用DotNet CLI命令并指定--framework参数(如果项目是多框架目标),或者修改NuGet配置强制传递开发依赖,但直接在启动项目安装是最简单直接的方式。
内容的提问来源于stack exchange,提问作者Vinuka Osura
相关产品推荐
相关产品推荐

