【发布时间】:2012-11-09 15:18:17
【问题描述】:
我正在升级应用程序并遇到一些问题。 现在旧应用程序是 1.0 版,并在 2.1.1 版加载依赖程序集 A 该程序集存在于应用程序本地目录中。 我正在将新应用程序升级到版本 2.0,它将加载程序集 A 版本 1.0.1,它存在于其应用程序本地目录中。我已经使用 ISpy 检查了应用程序引用并确认了新的应用程序引用 A 版本 1.0.1
但是当我启动新应用程序 (v 2.0) 时,它仍在尝试加载程序集版本 2.1.1 并且失败。我检查了 app.config、machine.config 和 GAC,并且没有针对程序集 A 版本的重定向。我还检查了融合日志文件,但没有看到任何重定向。我所看到的只是融合日志是应用程序在 2.1.1 版本中预绑定了 A,因此无法设置其本地目录中存在的程序集。
我在这里缺少什么吗?应用程序在运行时仍然引用旧程序集的可能原因是什么?
更新:使用一些工具,我意识到旧程序集是从我的应用程序引用的本机 DLL 引用的,但我不知道是哪个第三方 DLL,并且该应用程序加载了大量它们。融合日志通过记录“调用程序集:(未知)”来确认它。对于缺少的程序集。
现在我的下一步是找出哪个 dll 引用了错误的程序集并修复它。现在的问题是 ILSpy 工具不显示本机 DLL 引用,而 DLLDepends 工具不显示程序集引用,所以我无法链接两者。
谢谢
【问题讨论】:
-
本机代码使用的 .NET 程序集通常是 [ComVisible] 程序集。从注册表中的键中找到。如果您不知道,请使用 SysInternals 的 ProcMon。
-
感谢您的信息。但我没有看到我的任何程序集已注册。我在注册表中搜索了他们的名字,但一无所获。 COM dll 是否可以通过另一种方式引用旧版本的程序集?
-
当然。 ProcMon 告诉你什么?
-
其实 ProcMon 还是蛮有用的。感谢您指出。我想我需要使用 regasm 重新注册一些 .NET 程序集。所以我需要做一些注册表搜索来找出哪些是导致问题的。目前是一团糟。希望周一能解决这个问题。会让你知道的。
标签: c# .net .net-assembly