【问题标题】:Upgraded to .NET 4.0 & getting Could not load file or assembly reference to old version of DLL that was removed升级到 .NET 4.0 并获取无法加载文件或程序集引用到已删除的旧版本 DLL
【发布时间】:2010-11-24 01:39:06
【问题描述】:

System.IO.FileLoadException:无法加载文件或程序集“FOO,版本=1.0.3975.20137,Culture=neutral,PublicKeyToken=2aec35e026e7fee4”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (来自 HRESULT 的异常:0x80131040) 文件名:'FOO,版本=1.0.3975.20137

我有一个 C# 程序,我们会不断更新它并重新安装它,似乎自从我将项目从 VS2005 升级到 VS2010 和 .NET 从 2.0 升级到 4.0 之后,我在尝试引用时遇到了这个奇怪的错误上次安装的旧版本的 dll。

当我进入安装 Prorgam Files(x86)/.... 的目录时,最新版本的 DLL 就在其中。在代码中没有对旧 DLL 的引用。解决此问题的唯一方法是手动卸载程序并重新安装。之后程序运行正常。

我很困惑,为什么它甚至不存在时还要继续引用旧的 DLL 版本。我试过运行 fuslogvw.exe,但它没有产生任何有用的信息。我还认为这可能是我删除并从头开始重新创建的安装项目。我也完成了通常的清洁解决方案和重建。我已经通过论坛和在线搜索了所有内容,但大多数人似乎都有一个问题,即他们的 DLL 的旧版本仍在程序目录中,而新的 DLL 没有安装。我的问题正好相反。

【问题讨论】:

  • 您需要让 Fuslogvw.exe 为您工作。记录所有绑定,不要忘记单击刷新。还要记录你是否有一台新机器。以及您的 EXE 项目的平台目标设置。

标签: c# .net reference


【解决方案1】:

当 Clean 操作由于某种原因忘记删除我项目的 bin 目录中的所有 dll 时出现此错误,我不得不手动删除这些 dll。作为更新过程的一部分,您可能需要检查所有相关的 dll 是否已被删除。我猜这就是程序被卸载时会发生的情况,这就是它工作的原因。

【讨论】:

  • 它肯定会清除它并且新版本的 DLL 在那里。我检查过多次。它试图引用已更新的旧 dll
【解决方案2】:

我将从谁部署了最后一个破坏版本开始。

他们的机器可能错误地引用了错误/旧版本,无论是在 GAC 中还是来自 BIN 目录的残留。另外,您提到“手动”重新安装。这是否意味着您有一些构建服务器或其他部署自动化?它可能正在获取程序集引用。

基本上,您需要准确跟踪不良应用程序是如何部署到该计算机的并修复它。

【讨论】:

  • 不是机器问题。它是一个程序/部署问题。我已经看到在多台机器上遇到过这个问题。当我说手动重新安装。我的意思是要添加删除程序并从那里卸载它。然后重新运行 setup.exe 安装。通常我只是运行新的安装文件并将卸载旧版本属性设置为true,它会自动执行。但是我已经将它测试到我卸载旧版本然后手动安装新版本的地方。似乎让它正常工作的唯一方法是安装两次。
  • @user517761:啊,我明白了。你知道,我以前遇到过类似的事情。唯一的区别似乎是我们正在安装服务。它并非一直发生,但它似乎发生在某些机器配置上(XP、某些 SP 级别……)。我们没有费心去追踪它,而是将其作为标准程序进行卸载、重新启动、安装。我想知道某些操作系统的安装程序是否以某种方式被劫持。
  • 我已删除安装项目并创建了一个新项目。 win xp 32位和win 7 64位的问题是一样的。这很令人沮丧。
猜你喜欢
  • 2010-12-26
  • 2017-04-03
  • 1970-01-01
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多