You need to enable JavaScript to run this app. ASP.NET Core MVC 分层项目中Identity脚手架生成报错问题
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core MVC 分层项目中Identity脚手架生成报错问题

跨双项目ASP.NET Core MVC 生成Identity脚手架报错问题处理

现有问题上下文

  • 解决方案为双项目结构:
    • 独立类库项目:存放模型定义、业务服务、全局配置项
    • Web项目:承载控制器、视图等前端交互逻辑
  • 已完成的前置操作:
    • 引入整套Identity依赖NuGet包:Microsoft.AspNetCore.Identity.EntityFrameworkCore、Microsoft.AspNetCore.Identity.UI、Microsoft.Extensions.Identity.Stores
    • 在类库中自定义DbContext类,先后尝试两种继承写法:
      • 带泛型参数的标准写法:public class NameDbContext : IdentityDbContext<IdentityUser>
      • 无泛型参数写法:public class NameDbContext : IdentityDbContext
    • 已通过Package Manager Console依次执行add-migration、update-database命令完成迁移,数据库中可正常生成整套Identity关联数据表
  • 异常触发场景:在Web项目中右键选择「添加」→「新建搭建基架项」,选择Identity功能项准备生成页面对应代码时,弹出报错提示,两种DbContext写法均无法解决该异常

核心报错原因

  • 脚手架工具的类型扫描逻辑默认局限于当前Web项目程序集,无法自动识别类库项目中定义的DbContext类型,导致上下文校验失败
  • Web项目未提前在依赖注入容器中注册Identity相关服务,脚手架预校验阶段找不到已配置的服务入口
  • 类库与Web项目引用的Identity、EF Core相关NuGet包版本不统一,存在类型加载冲突
  • 跨项目场景下遗漏了Web项目侧的脚手架运行基础依赖,导致工具无法正常加载类型

分步修复方案

  • 确认Web项目的脚手架基础依赖
    • 为Web项目安装版本匹配的Microsoft.VisualStudio.Web.CodeGeneration.DesignNuGet包,这是Visual Studio脚手架工具正常运行的必备依赖,跨项目拆分结构下经常被遗漏
  • 提前完成Web项目的Identity服务注册
    • 在Web项目的Program.cs(.NET 6+ minimal hosting模式)或Startup.cs(.NET 5及之前版本)中引入类库命名空间,完成DbContext与Identity服务的依赖注入配置,示例代码:
      // 引入类库的模型与DbContext命名空间
      using 你的类库项目命名空间;
      
      // 注册数据库上下文,关联配置文件中的连接字符串
      builder.Services.AddDbContext<NameDbContext>(options =>
          options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
      // 注册Identity核心服务,绑定自定义DbContext
      builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
          .AddEntityFrameworkStores<NameDbContext>();
      
  • 统一跨项目的NuGet包版本
    • 逐一比对类库项目、Web项目中所有EntityFrameworkCore、Identity相关NuGet包的版本号,确保与项目目标框架完全适配,避免不同版本间的类型加载冲突
  • 正确配置脚手架生成界面的上下文关联
    • 进入Identity脚手架选择界面后,勾选需要生成的页面项(登录、注册、个人信息管理等),在「数据上下文类」选择栏,不要选择自动新建的临时上下文,手动定位选择类库中定义的NameDbContext
    • 如果下拉框无法自动识别到该类型,直接在输入框中填写带程序集标识的全限定类名,格式为[类库命名空间].NameDbContext, [类库项目程序集名]
  • 清理本地工具缓存
    • 关闭Visual Studio后,删除解决方案根目录下的.vs隐藏文件夹,同时删除所有项目目录下的bin、obj编译缓存文件夹,重新打开解决方案还原NuGet包后,再次尝试脚手架生成操作

内容的提问来源于stack exchange,提问作者user14669223

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.07 21:45:08