You need to enable JavaScript to run this app. 为何.NET Framework中Assembly.LoadFrom跨系统行为存在差异?
优惠活动
大模型
产品
解决方案
定价
更多

为何.NET Framework中Assembly.LoadFrom跨系统行为存在差异?

问题原因解答

1. 底层运行环境差异

首先明确前提:.NET Framework 4.7.2是Windows专属运行时,Mac系统上不存在原生.NET Framework实现,你在TeamCity Mac代理上运行程序时,实际使用的是Mono兼容运行时,二者对Assembly.LoadFrom的实现逻辑存在本质差异,这是导致表现不一致的核心原因。

2. Windows侧行为符合.NET Framework原生规则

你查阅的官方文档中「相同标识已加载则直接返回」的规则,前提是两次加载的程序集四元组标识(名称+版本+区域性+公钥令牌)完全一致。
你的场景里两次加载的MyLib版本分别是1.1.0.0和2.2.0.0,本身就不属于相同标识,所以.NET Framework允许将两个不同版本的程序集同时加载到默认上下文(HostContext=0)中,Windows侧的表现完全符合官方设计。

3. Mac侧Mono运行时的实现简化

Mono对LoadFrom方法做了轻量化实现,默认仅匹配程序集的简单名称,不会完整校验四元组标识:只要已加载过同名程序集,不管版本、路径是否有差异,都会直接返回已加载的实例,所以才会出现调用LoadFrom加载1.1.0版本路径,却返回已加载的2.2.0版本实例的情况。
这是Mono跨平台实现的设计取舍,不属于运行时bug。

兼容解决方案

如果需要在跨平台场景下强制加载指定路径的程序集,可将Assembly.LoadFrom替换为Assembly.LoadFile,该方法在.NET Framework和Mono下都会直接加载指定路径的程序集文件,不受已加载同名程序集的影响。

内容的提问来源于stack exchange,提问作者user1234567

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 16:12:01