随着迁移到.net 4,我们开始面对我们的库的问题。假设我们有一个库MyLib.dll,它引用了互操作程序集Interop.dll。Interop.dll引用了MissingInterop.dll。
因此,引用可以显示为:MyLib.dll -> Interop.dll -> MissingInterop.dll
在MyLib.dll中,我们只使用来自Interop.dll的类的一部分,所以我们从不调用任何需要MissingInterop.dll的东西,而在.net 3.5中,它工作得很好,这就是为什么我们不将MissingInterop.dll与MyLib.dll一起发布。
当我们从.net 4下运行的进程中使用MyLib.dll时,应用程序会失败,并出现以下异常:
FileNotFoundException:“未能加载文件或程序集'MissingInterop.dll,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null‘或其依赖项之一。系统找不到指定的文件。”`
另外,我注意到Interop.dll引用了其他缺少的动态链接库,但.net并没有尝试加载它们。我已经找到了不同之处。来自MissingInterop.dll的一些类型在Interop.dll的方法参数中使用,而来自其他缺少的库的类型仅用作方法返回类型,即在Interop.dll中我可以看到:
Class C1
MethodA : void (valuetype [MissingInterop]MissingAssembly.TypeA&)
Class C2
get_Status : valuetype[AnotherMissingInterop]AnotherMissingAssembly.TypeB()
.NET 4尝试加载MissingInterop.dll,但不尝试加载AnotherMissingInterop.dll。
.NET 3.5未尝试加载MissingInterop.dll或AnotherMissingInterop,因为它们未在执行路径中使用。
我知道.NET 4有了新的Fusion,但我还没有在任何地方找到这样的突破性变化。有人知道为什么.NET 4试图加载一些不需要的东西吗?有没有办法在不重新编译代码或添加丢失的文件的情况下修复这个问题?
发布于 2012-02-22 18:28:13
当您将应用程序从.NET 3.0、3.5迁移到4.0时,您需要在外部将此mylib.dll包含到您的项目中并对其进行编译,或者如果可能,您有汇编的源代码,然后将其更改为.net 4.0
发布于 2012-02-14 19:49:14
可能不是(根据经验)。之前的一个步骤也有类似的问题(不记得是2.0 -> 2.1还是3.0 -> 3.1。但这是一段时间之前),我们有机器报告说,较早的版本已安装,并崩溃。当我们清理了网络安装,并实际安装了较低版本,然后更新,所有的工作都很好。微软可能会偷偷发布一个补丁。我倾向于向女士提出这个问题,你有一个似乎研究得很好的bug,在这种情况下,无论是否支持合同,他们都非常不情愿最终向你收费。(不管怎样,我的经验)
https://stackoverflow.com/questions/9034816
复制相似问题