Add Identity对话框用户类选项禁用,Identity脚手架搭建报错如何解决
排查步骤
- 首先校验所有相关NuGet包的版本一致性:所有
Microsoft.AspNetCore.Identity.*、Microsoft.EntityFrameworkCore.*、Microsoft.VisualStudio.Web.CodeGeneration.Design包的主版本号必须和项目的目标.NET SDK版本完全匹配,例如项目目标框架为.NET 6时,不允许安装7.x及以上版本的上述包,版本不匹配会直接导致代码生成器无法识别自定义用户类,出现选择框禁用的问题。 - 检查服务注册配置:在Program.cs(.NET 6+)或Startup.cs中,需显式指定Identity服务的用户类型,示例配置如下:
// .NET 6+ Program.cs 示例 builder.Services.AddIdentity<ApplicationUser, IdentityRole>(options => {}) .AddEntityFrameworkStores<ApplicationDbContext>() .AddDefaultTokenProviders();
未显式注册ApplicationUser的情况下,脚手架无法扫描到对应的用户类,会默认禁用选择框。
- 提前编译整个项目:Identity脚手架需要从已编译的程序集中读取类型定义,在触发脚手架生成前,先手动生成一次整个解决方案,避免未编译导致自定义类无法被识别。
- 处理包还原失败问题:
- 关闭VS后删除项目根目录下的
.vs、bin、obj文件夹,清除本地缓存的生成文件 - 在NuGet包源设置中,将
nuget.org官方源设为最高优先级,临时禁用其他私有包源,避免私有源拉包失败导致回滚 - 手动在项目目录下执行
dotnet restore命令,确认没有报错后再尝试生成脚手架
- 关闭VS后删除项目根目录下的
- 绕开UI脚手架的稳定性问题:VS内置的Identity脚手架UI确实存在较多适配bug,可直接使用命令行工具生成所需页面,无需通过UI选择,示例命令如下:
# 生成所有Identity页面,指定数据库上下文和用户类 dotnet aspnet-codegenerator identity -dc ApplicationDbContext -u ApplicationUser # 如果只需生成部分页面,可加--files参数指定,例如只生成登录、注册页 dotnet aspnet-codegenerator identity -dc ApplicationDbContext -u ApplicationUser --files "Account.Login;Account.Register"
内容的提问来源于stack exchange,提问作者Jonathan Wood
相关产品推荐
相关产品推荐

