霜知坚冰 2023-03-28 10:46 采纳率: 0%
浏览 16

C# 反射类访问公共资源

C# 定义一个公共的库,库中有一个静态变量 在主程序初始化了值。
通过反射加载另外一个库,反射出来的库同样引用了公共库, 在放射出来的类中去访问公共库中的静态变量就为空,是怎么回事,有知道的哥们自导下。

  • 写回答

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相关资料,这个我不贴代码了。因为这玩意还是很复杂的,一句话两句话难的折腾清除,只能你自己理解了

    评论

报告相同问题?

问题事件

  • 创建了问题 3月28日

悬赏问题

  • ¥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实现文字转语音?