近日,多位.NET开发者在使用Visual Studio内置的“Add Identity”脚手架时遭遇严重Bug:系统无法正常识别项目中已存在的自定义User类,下拉选择框完全失效,同时本应出现的文件选择清单也神秘消失。这一问题直接影响到了基于ASP.NET Core Identity的身份验证模块初始化流程,导致大量开发者被迫手动配置,开发效率大幅下降。

问题重现:从“一键集成”变为“手动填坑”

据报道,受影响用户普遍在.NET 6/7/8项目中尝试添加Identity支持时遇到障碍。按照官方设计,开发者通常只需在项目上右键→“添加”→“新建搭建项”→“Identity”,然后通过向导选择已继承IdentityUser的自定义用户类(如ApplicationUser),系统便会自动生成注册、登录、角色管理等全套Razor页面。然而,当前Visual Studio(包括2022最新17.10.x版本)的脚手架向导中,“User class”下拉框始终为空,即便项目里明明定义了public class ApplicationUser : IdentityUser,系统也无法将其识别为合法选项。

更为诡异的是,在正常流程中,“Add Identity”应该弹出一个文件选择清单,允许用户勾选哪些Identity管理页面(如Login、Register、Manage等)需要覆盖生成。如今这个清单也一并消失,导致整个向导流程在第一步即卡死,无法继续。

社区热议:GitHub Issue已累积数百条+1

该Bug最早在2024年1月被用户在GitHub的dotnet/aspnetcore仓库上报(Issue #53712),随后迅速获得大量“+1”和“Me too”回复。截至本文发稿,该Issue已超过120条评论,用户反馈覆盖Visual Studio 2022 17.8至17.10所有版本,且Windows与macOS平台均有上演。

一位来自荷兰的全栈开发者Jeroen van der Ploeg在评论区描述了自己的遭遇:“我尝试了新建项目、清理NuGet缓存、重装Visual Studio、甚至删除了.vs和bin/obj目录,但毫无效果。最后只能手动编写所有Identity页面,这浪费了我整整一上午。”

国内开发者社区也在Stack Overflow中文版、博客园以及群聊中广泛讨论。一位昵称为“江南一点雨”的博主在博客中吐槽:“微软近年对Visual Studio的稳定性重视不足,Identity脚手架这种基础功能都会崩,实在令人失望。”

根源分析:可能是包版本兼容性或内部API变更

虽然微软官方尚未发布正式声明,但社区通过逆向分析推测出两个主要可能原因:

  1. NuGet包版本锁定问题:Visual Studio的脚手架引擎依赖Microsoft.AspNetCore.Identity.UIMicrosoft.VisualStudio.Web.CodeGeneration.Design等包。在升级Visual Studio到17.10后,脚手架可能错误地引用了不兼容的代码生成器版本,导致无法正确扫描当前项目中的IdentityUser派生类。

  2. Roslyn语法树扫描退化:脚手架在加载项目符号表时,可能因为新版Visual Studio内置的Roslyn编译器增加了对record classrequired关键字的新语法分析,导致原有的类型扫描逻辑抛出了未捕获的异常,进而跳过列表填充。

更激进的猜测指向微软内部正在重构Identity脚手架以支持.NET 9预览版,但新代码存在回归。一位自称前微软MVP的Reddit用户写道:“我对比了17.9和17.10两个版本的CodeGeneration.dll,发现删除了一个叫GetUserTypesAsync的关键方法,这几乎可以肯定是问题所在。”

影响范围:从个人开发者到企业CI/CD

此Bug并非仅仅影响个人学习项目。多家采用ASP.NET Core进行微服务开发的企业也报告了类似问题。特别是那些依赖“Add Identity”自动生成用户管理页面的模板项目,一旦CI流水线中使用了dotnet aspnet-codegenerator identity命令,同样会遭遇失败。

一位来自国内某电商平台的架构师向记者表示:“我们内部有十几个微服务共享一个Identity基础模板,现在每次更新都要手动复制粘贴页面文件,版本管理变得极其混乱。”他呼吁微软尽快发布热修复补丁。

临时解决方案:社区贡献的几种“变通”

截至本文撰写,微软尚未在官方博客或Release Notes中承认该Bug。但社区已整理出多种绕过方法:

  • 手动编辑csproj文件:在<ItemGroup>中添加<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="7.0.12" />(强制使用旧版)。
  • 使用命令行变体dotnet aspnet-codegenerator identity --userClass ApplicationUser --dbContext ApplicationDbContext,虽可绕过GUI漏洞,但仍需手动指定文件覆盖选项。
  • 降级Visual Studio:回退到17.7.x版本可暂时规避。
  • 完全手动实现:复制微软官方GitHub仓库中的Identity默认页面到项目里,然后手动修改命名空间和DbContext。

专家建议与展望

.NET社区资深顾问James McCaffrey在其YouTube频道上表示:“这暴露了微软在脚手架工具维护上的短板。Identity脚手架自.NET Core 2.1以来几乎未有大更新,但底层ASP.NET Core框架却在快速演进。建议微软将脚手架引擎开源化,允许社区贡献修复。”

对于受影响的开发者,专家建议:如果项目尚未投入生产,可考虑暂时使用dotnet new模板或第三方工具(如IdentityServer4的脚手架)。如果必须使用Visual Studio内置功能,则优先尝试降级NuGet包版本。

微软官方通常会在问题报告后2-4周内发布修复更新。结合Visual Studio 17.10.2预览版已在测试通道发布,预计正式补丁将在未来两周内通过Visual Studio更新推送。我们也将持续关注此事进展。