C# 定义一个公共的库,库中有一个静态变量 在主程序初始化了值。
通过反射加载另外一个库,反射出来的库同样引用了公共库, 在放射出来的类中去访问公共库中的静态变量就为空,是怎么回事,有知道的哥们自导下。
C# 反射类访问公共资源
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- wanghui0380 2023-03-28 11:13关注
一句代码木有
但是我们可以猜一猜
假设主库引用了公共库,同时引用了继承公共库的A,理论上无问题。当然如果主库引用了A,我想你不会在想着弄反射,既然引用了A那么直接new A就好,反射派不上用途
所以反证,主库没有引用A。那么你怎么引用的的A呢,应该是Assembly.Load,这种于是有2种情况:
1.A.dll 和主库在相同目录,并且公共库版本签名相同。load的时候,系统判定公共库已经在domain里无需在加载,那么此时A和主库使用相同的Assembly
2.假设A.dll 被放进了和主库不同的目录,此时也有2种情况
2.1:如果A.dll目录里也存在公共库,那么主库反射加载a.dll会重新加载公共库
2.2:如果A.dll目录里没有公共库,他会向主库的domain反馈有个依赖库需要加载,请问主库加载没有其实这问题很常见,因为很早以前我们就一直碰到一些这类问题,比如官方告诉你无法将“XML对象转换成XML对象”,“无法将JToken转换成JToken”,其实就是这种问题,虽然都是JToken,不过他们不是主程序域的相同Assembly.
解决方法:去查找 AssemblyLoadContext相关资料,这个我不贴代码了。因为这玩意还是很复杂的,一句话两句话难的折腾清除,只能你自己理解了
解决 1无用
悬赏问题
- ¥15 Coze智能助手搭建过程中的问题请教
- ¥15 12864只亮屏 不显示汉字
- ¥20 三极管1000倍放大电路
- ¥15 vscode报错如何解决
- ¥15 前端vue CryptoJS Aes CBC加密后端java解密
- ¥15 python随机森林对两个excel表格读取,shap报错
- ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
- ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
- ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
- ¥15 VFP如何使用阿里TTS实现文字转语音?