AssemblyResolveHook
几点解释: 问:例程中的GetFieldValue/SetFieldValue,没有这样的方法? 答:这是扩展方法,能看到这里的你,也不会在乎反射的这几行代码怎么写 问:AssemblyResolveHook.Handsup 调用之后,新添加的 AssemblyResolve 事件响应有问题怎么办? 答:一般AssemblyResolve事件会在第一时间响应,故可延迟调用AssemblyResolveHook.Handsup 问:怎么知道字段名是 _AssemblyResolve? 答:反正用VS2022社区版,光标放代码的AppDomain上按F12,就能看到答案 。其它版本VS应该也行 问:被关小黑屋了,如果对方要注销 AssemblyResolve 事件的响应咋办? 答:太多问题了…
五、探讨
本问题提及AssemblyResolve事件的某响应函数一旦返回了非null程序集,就不会再调用后续的响应函数,可以光标放代码的AppDomain上按F12,找到对应的 .NET Framwork 代码证实 。 如下:
1 [SecurityCritical] 2 private RuntimeAssembly OnAssemblyResolveEvent(RuntimeAssembly assembly, string assemblyFullName) 3 { 4 ResolveEventHandler assemblyResolve = _AssemblyResolve; 5 if (assemblyResolve == null) { 6 return null; 7 } 8 9 Delegate[] invocationList = assemblyResolve.GetInvocationList();10 int num = invocationList.Length;11 for (int i = 0; i < num; i++) {12 Assembly asm = ((ResolveEventHandler)invocationList[i])(this, new ResolveEventArgs(assemblyFullName, assembly));13 RuntimeAssembly runtimeAssembly = GetRuntimeAssembly(asm);14 if (runtimeAssembly != null) {15 return runtimeAssembly;16 }17 }1819 return null;20 }OnAssemblyResolveEvent
如果哪天微软对上述代码稍加修改,本关小黑屋方法就可以退休了 。 (全文完,本文最早由yangzhj发表于博客园,转载需注明出处)
【.Net Framework中的AppDomain.AssemblyResolve事件的常见用法、问题,以及解决办法】
经验总结扩展阅读
- gorm中的关联操作详解
- OnionArch - 采用DDD+CQRS+.Net 7.0实现的洋葱架构
- 怎样把ppt中的文字变窄啊
- 百香果籽种植方法
- 红楼梦中的几个故事情节概括和感想
- Go中的闭包、递归
- 固体物理中的倒格子有什么用
- Java核心技术阅读笔记 java中的自动拆装箱与缓存
- 记一次 .NET 某工控视觉软件 非托管泄漏分析
- Bing 广告平台迁移到 .net6