【问题标题】:.net runtime tries to use the wrong version of an assembly.net 运行时尝试使用错误版本的程序集
【发布时间】:2009-01-16 10:30:02
【问题描述】:

我有一个引用程序集“Microsoft.Xna.Framework, Version=2.0.0.0, Culture=neutral, PublicKeyToken=6d5c3888ef60e27d”的应用程序。我创建了一个安装程序项目,将这个程序集安装在 GAC 中(通过运行 XNA redist 安装程序)。

但是,当第一次使用此程序集时,我在 JITing 期间收到异常。然后我尝试对图像进行 ngen,并且 ngen 给出以下错误消息:

Failed to load dependency Microsoft.Xna.Framework of assembly x,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null because of the following
error : The specified module could not be found. (Exception from HRESULT: 0x8007007E)

请注意,版本为 1.0.0.0 且缺少 PublicKeyToken,并且不存在伪造的程序集。什么会导致 JITer 和 ngen 尝试加载这个错误版本的程序集?

正确版本的程序集在 GAC 中。我已经在 Reflector 中打开了我的图像,并且参考在那里正确显示。我还验证了依赖层次结构中没有其他程序集加载伪造的 1.0.0.0 版本。其实1.0.0.0版本在任何地方都不存在,无论是在开发盒还是测试机上。

但是,当尝试在测试机器上扩展对 Microsoft.Xna.Framework 的引用时,Reflector 认为(正确地)引用的程序集版本是 2.0.0.0,但是即使我可以看到它也找不到它在资源管理器中查看 c:\windows\assembly 时的 GAC。

请帮忙。

【问题讨论】:

  • 可能在参考上复制本地?
  • 引用的程序集应该在 GAC 中,我可以在 c:\windows\assembly 中看到它。

标签: .net deployment assembly-resolution


【解决方案1】:

(注意 - 在外部 1.0 dll 之前编辑)

您是否使用任何外部 dll?也许是一些引用 1.0 版本的第 3 方 xna dll。如果首先发现这一点,那么所有的赌注都可能会失败。尝试查看反射器中的任何外部 dll,然后查看它们引用的版本。您也可以尝试为 xna dll 添加version policy

【讨论】:

  • 感谢依赖层次结构的建议,但不幸的是它没有帮助。我更新了问题。我还检查了版本策略选项,但它似乎无济于事,因为我必须同时更改版本和公钥令牌。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-10
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 2023-02-07
  • 2011-05-20
  • 1970-01-01
相关资源
最近更新 更多