SuperAPI AI 工具集

support-hot-reload

编程与开发

查看项目

更新于 10-15 21:12

技能介绍

用途:帮助开发者判断 ASP.NET Core 功能是否需要热重载处理,并在需要时让功能在 .NET Hot Reload 下正确工作。核心问题是:当开发者在运行中的应用里编辑源码时,功能从旧元数据派生的进程级状态必须失效,否则应用会静默沿用过期缓存,编辑只在手动重启后才生效。

判断标准:若功能持有由类型或成员元数据派生的进程级状态(静态或单例缓存,以 Type、MethodInfo、PropertyInfo 或程序集为键,保存反射结果、编译后的 getter/setter/工厂、特性查找、路由/终结点表、模型元数据),且该缓存只填充一次并复用整个进程生命周期,同时合理的源码编辑会改变缓存内容,则需热重载处理。仅按需读取元数据、状态为每请求级别的功能通常无需处理。

实现方式:默认使用运行时元数据更新处理器,用 [assembly: System.Reflection.Metadata.MetadataUpdateHandler(typeof(MyFeatureHotReload))] 标记程序集,实现静态方法 ClearCache(Type[]?) 与 UpdateApplication(Type[]?),前者先运行清缓存,后者刷新派生状态。若所属子系统已集中处理热重载通知(如 Components 的 HotReloadManager.OnDeltaApplied、MVC 的 Hot Reload 服务),应复用其机制而非新增独立处理器。清缓存不足时,还需为保留的运行时对象重算派生状态。

验证:在 dotnet watch 下编辑相关声明,确认新行为无需重启即出现,并以 watch 日志(changes applied、无重启)为准,避免 rude edit 触发重启造成假象。单元/集成测试覆盖缓存清理与派生状态重算,dotnet watch 配合可观察边界验证真实增量。

限制:并非所有编辑都能热重载,重命名或删除字段、更改字段类型、更改常量、编辑启动行为等通常需要重启;新增字段不会在既有实例上初始化,不同运行时能力集可能不同。