【问题标题】:Replacing dll to a newer version将dll替换为较新的版本
【发布时间】:2013-01-25 06:26:14
【问题描述】:

我有一个包含许多项目的 Caliburn.Micro 应用程序。多个项目在单独的文件夹中引用相同的 dll。现在我需要用更新的版本替换那个 dll。我从所有项目中删除了引用并再次添加。 但是我遇到了运行时错误:

你能帮忙吗?

附:我尝试使用 fuslogvw.exe,但它显示为空:

【问题讨论】:

  • 错误是什么&最好将nuget用于第三方dll。
  • 在我的问题的图片中可以看到错误:无法加载文件或程序集'FileHelpers,Version=2.0.0.0,Culture=neutral,PublicKeyToken=3e0c08d59cc3d657'或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (HRESULT 异常:0x80131040)
  • 您是否尝试过清理和重建您的解决方案?
  • 是的,但没有帮助。
  • 嗯,更新不太顺利。它正在查找 FileHelpers.dll 程序集的错误版本,可能是旧版本。如果您不知道它的来源,请使用 Fuslogvw.exe 获得洞察力。

标签: c# .net-assembly caliburn.micro assemblybinding fuslogvw


【解决方案1】:

我认为您正在使用 Visual Studio。 首先,如果特定版本设置为 False,请检查所有 FileHelpers 引用的属性(如果没有,请执行此操作)。尝试清理并重建。

如果问题仍然存在,请在解决方案的 app.config 中的 configuration 部分中添加

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="FileHelper" publicKeyToken="3e0c08d59cc3d657" culture="neutral"/>
            <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0"/>
        </dependentAssembly>
    </assemblyBinding>
</runtime>

通过这种方式,您应该能够将使用过的版本强制为新版本。

【讨论】:

  • 特定版本设置为 False。我添加了该程序集绑定,但没有任何帮助:(
  • 我复制了您的 app.config 代码,但没有注意到它有 FileHelper 而不是 FileHelpers。当我改变它时,它起作用了。谢谢。
  • 糟糕,很抱歉这个错误,我很高兴它有帮助。可能一些引用的 dll 引用了旧版本的 FileHelpers。您应该不时检查是否可以从 app.config 中删除这些行。
  • 今天早上我打开了日志查看器,里面装满了程序集。我不知道从昨天开始发生了什么变化。我什至发现了一个对旧 dll 的引用。修复后,我能够从 app.config 中删除映射并运行应用程序,但在单击发布后无法打开它。所以我只好恢复映射,不知道为什么。
【解决方案2】:

我的猜测是您需要添加对其他程序集的引用。

请附上 csproj 的文本以显示对您更新的 dll 的引用。

程序集可以引用其他不需要编译但在运行时需要的程序集。您需要确定FileHelpers 是否是您明确引用的程序集。请参阅以下链接了解如何使用 Fusion Log Viewer。它将为您提供有关在何处查找程序集的信息。

【讨论】:

  • 我在解决方案中有很多项目。这是主要项目的一部分:False..\.. \lib\FileHelpers.dll
  • 并且日志查看器的应用程序列表是空的(我不知道为什么),正如您在原始问题中附加的图片中看到的那样。
  • @David,您没有正确配置 Fusion Log Viewer。这就是为什么您看不到任何程序集的原因。我包含的链接可帮助您解决看不到任何条目的原因。对不起,我不清楚。很高兴组装绑定让您工作。
  • 今天早上我打开了日志查看器,里面装满了程序集。我不知道从昨天开始发生了什么变化。我什至发现了一个对旧 dll 的引用。谢谢。
  • 如果您在日志中搜索FileHelpers,您将找到引用旧版本的程序集。它可能在您的项目中的某个地方,您仍然持有对旧版本的引用,或者它可能是通过包含对旧版本的引用的编译引用。如果是后者 - 那么@VollmonD 解决方案可能是唯一的解决方法,否则,如果它是您控制的代码,最好直接更新您的 ref,然后删除运行时程序集绑定。
猜你喜欢
  • 2023-03-09
  • 1970-01-01
  • 2017-07-27
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多