【问题标题】:critical runtime error after upgrading application with .NET assembly dependencies使用 .NET 程序集依赖项升级应用程序后出现严重的运行时错误
【发布时间】: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


【解决方案1】:

由于您尝试引用的库应该是 GAC 的一部分;你可能想试试:

  1. 控制面板
  2. 小图标(管理工具)
  3. 事件查看器
  4. 应用

Windows 本身应该抛出一个异常,并在出现错误时尝试引用一些特定的细节。特别是如果它是 GAC 的一部分。相当容易地磨练 mscoree.dllmscorelib.dll 库对我更有帮助。授予我使用的那些客户有损坏的框架;但事件查看器告诉我它有问题的确切库。

您可能想尝试一下。不确定哪个库;但请记住,这通常对%windir%/Assembly 文件夹中的库有益。希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2021-02-04
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 2017-05-19
    • 2021-05-01
    相关资源
    最近更新 更多