gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:03:48 24 4
gpt4 key购买 nike

随着迁移到 .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: "Could not load file or assembly 'MissingInterop.dll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified."`



我还注意到 Interop.dll 引用了其他丢失的 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 会尝试加载不需要的东西吗?
有没有办法在不重新编译代码或添加丢失文件的情况下解决这个问题?

最佳答案

可能不是(根据经验)。之前的步骤也有类似的问题(不记得是 2.0 -> 2.1 还是 3.0 -> 3.1。但那是前一段时间)我们有机器报告说安装了早期版本,然后崩溃了。当我们清除网络安装并实际安装较低版本,然后更新时,一切正常。微软可能会偷偷推出一个补丁。我倾向于用 MS 实际提出它。您有一个看似经过充分研究的错误,在这种情况下,无论是否支持契约(Contract),他们都非常不愿意最终向您收费。 (反正我的经验)

关于.NET 4 加载不同于 .NET 3.5 的程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9034816/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com