首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >.NET 4加载与.NET 3.5不同的程序集

.NET 4加载与.NET 3.5不同的程序集
EN

Stack Overflow用户
提问于 2012-01-27 22:31:46
回答 2查看 1K关注 0票数 16

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

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9034816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档