为什么Assembly.LoadFrom从GAC加载之前卸载的强命名程序集而不是从指定路径加载?

问题描述 投票:0回答:1

我正在尝试加载

System.ValueTuple 版本=4.0.3.0,文化=中性,PublicKeyToken=cc7b13ffcd2ddd51

在我当前的应用程序域中,通过指定完整路径使用 Assembly.LoadFrom 方法。

该程序集确实存在于该路径中,并且它具有与我需要的版本相同的版本,但它最终会加载

System.ValueTuple 版本=4.0.0.0,文化=中性,PublicKeyToken=cc7b13ffcd2ddd51

来自 GAC。

第二个具有不同的内部版本号。我知道程序集探测从 GAC 开始,但由于这些程序集都是强命名的(因此它们都有唯一的标识),难道它不应该意识到这些是不同的程序集,然后在 GAC 中找不到它后加载它从指定路径?

有没有办法可以强制它从指定路径加载,而不是从 GAC 加载?

c# .net .net-assembly gac
1个回答
0
投票

装配探测并非从 GAC 开始。

  1. 根据应用程序配置、策略文件和机器配置确定正确的程序集版本
  2. 重用已绑定的同名程序集
  3. GAC 查找
  4. 使用提示、代码库或探测配置元素进行探测

很有可能,在您尝试加载您的版本之前,某些程序集已加载版本,因此它总是会选择已经找到的版本。

您可以尝试调查哪个程序集正在加载此类版本,并将该一个或这些程序集更新为所有引用并加载您需要使用的版本。或者,如果不可能的话,您可以添加程序集重定向。

更多信息:

运行时如何定位程序集

重定向程序集版本(.NET Framework)

将绑定重定向添加到 .Net 标准库 (.NET Core)

© www.soinside.com 2019 - 2024. All rights reserved.