随着迁移到.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试图加载一些不需要的东西吗?有没有办法在不重新编译代码或添加丢失的文件的情况下修复这个问题?
https://stackoverflow.com/questions/9034816
复制相似问题