.net运行时尝试使用错误版本的程序集

时间:2009-01-16 10:30:03

标签: .net deployment assembly-resolution

我有一个引用程序集“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。

请帮忙。

1 个答案:

答案 0 :(得分:0)

(注意 - 前期编辑重新外部1.0 dlls)

您使用的是外部dll吗?也许某些第三方xna dll引用了1.0版本。如果首先发现这一点,则所有投注都可能会被取消。尝试查看反射器中的任何外部dll,请查看它们引用的版本。您也可以尝试为xna dll添加version policy