请说明 .NET 中实现 IL Weaving 的机制与流程,并列举常见的 IL Weaving 工具及其适用场景。
考察说明
考查对 .NET 元数据与 IL 操作原理的理解,以及常用编织工具链的掌握程度。
回答思路
- 【回答框架 1】IL Weaving 是在程序集编译后、运行时或加载时修改中间语言代码的技术,用于横切关注点注入,例如 AOP 属性、INotifyPropertyChanged、性能监控等。其核心机制是先反编译已有程序集,修改 IL 指令流,再重新编译保存。
- 【回答框架 2】常用工具包括:Fody,基于模块初始化器和 MSBuild 任务,使用简单,适合大量场景;Mono.Cecil,底层库,可直接读写程序集,灵活度高;PostSharp,商业产品,提供声明式 AOP 特性,编译时织入;Roslyn 虽不直接织入 IL,但可通过分析器生成新代码。
- 【回答框架 3】实现流程通常为:读取程序集元数据,查找目标类型或方法,在 IL 流中插入新指令或修改现有指令,最后写回程序集。需注意版本兼容、强名称签名和性能开销。
- 【回答框架 4】选择工具时,若追求开发效率且场景常见,优先 Fody;若需深度自定义,选择 Mono.Cecil;若接受商业授权,PostSharp 提供更丰富的 AOP 能力。
- 【关键点 1】IL Weaving 是在编译后修改程序集 IL 代码的技术,常用于横切逻辑注入。
- 【关键点 2】Fody 提供易用的 weaving 框架,Mono.Cecil 是底层操作库,PostSharp 为商业 AOP 方案。
- 【关键点 3】修改 IL 需注意程序集签名、版本兼容和性能影响。
- 【易错点 1】忽略强名称签名导致程序集加载失败。
- 【易错点 2】修改 IL 后不验证逻辑正确性,可能导致运行时异常。
- 【易错点 3】过度依赖 weaving 增加调试与维护难度。