You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET动态加载程序集时依赖未加载的原因咨询

问题原因分析

这两种场景的差异核心在于构建阶段的依赖复制逻辑和**.NET程序集加载上下文的行为**两个方面:

1. 构建阶段的依赖复制差异

当A只通过B间接引用D时,项目构建系统只会复制“直接依赖”以及能通过传递引用链触达的程序集。但D对E的引用不会自动传递到A——因为A和E之间没有明确的引用关联(A→B→D→E这条链里,B并没有引用E,构建系统不会主动把D的依赖E复制到A的输出目录)。这就导致A的bin目录里只有D.dll,却没有E.dll。

而当A直接添加对D的引用后,D变成了A的直接依赖,构建系统会自动将D的所有传递依赖(包括E)复制到A的bin目录,为后续的依赖解析做好准备。

2. 程序集加载上下文的行为差异

  • 当A直接引用D时,D会被.NET的默认加载上下文加载(要么在应用启动时,要么在首次调用D中类型时)。默认加载上下文会自动从应用基目录(A的bin目录)探测并加载所有依赖的程序集,只要文件存在就能正常解析。
  • 当你通过Assembly.Load("D")动态加载D时,即使D.dll存在于bin目录,.NET在解析D的依赖E时,会因为E.dll不存在(或不在探测路径中)而无法加载E。而你要获取的SomeType很可能依赖E中的类型,此时类型元数据无法被完整解析,最终导致GetType返回null。

验证建议

你可以检查两种场景下A的bin目录:

  • 不添加A对D的引用时,bin目录里应该没有E.dll;
  • 添加引用后,E.dll会出现在bin目录中。

内容的提问来源于stack exchange,提问作者m.stm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:48:15