【问题标题】:dll built with 3rd party dll stops working when 3rd party software changes version当 3rd 方软件更改版本时,使用 3rd 方 dll 构建的 dll 停止工作
【发布时间】:2012-10-26 15:14:40
【问题描述】:

如果为我提供了第 3 方 dll,例如 1.1 版

然后我构建一个我自己的 dll 引用这个第 3 方 dll(版本 1.1)

现在我将我的 dll 提供给第 3 方。我的 dll 是使用他们 1.1 “api” dll 构建的。

现在第 3 方将他们的 dll 的版本更改为 1.2 版,该版本也在他们的软件中使用。

在此之后,他们的软件不能再使用我用 1.1 版编译的 dll,直到我用他们的 1.2 版 dll 重新编译我的插件 dll。

如何解决这个问题?

【问题讨论】:

  • 您是否将“特定版本”设置为“真”以用于添加到该 DLL 的引用?如果答案是肯定的,只需将其设置为“False”(我想,当然,您不需要更改代码即可从 1.1 升级到 1.2...)
  • 谢谢,我已将特定版本设置为 false,并且任何接口或功能都没有更改。来自第 3 方的错误就像 dll 加载程序异常。这可能是他们的问题吗?
  • 这可能是他们一方的错误,但要诊断您需要更详细的报告...
  • 这是他们这边的错误:无法加载文件或程序集 'company.class.Client, Version=1.1.8.2, Culture=neutral, PublicKeyToken=b0d2f667011a393b' 或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (HRESULT 异常:0x80131040)
  • company.class.Client 是您的程序集还是他们的程序集?

标签: .net dll versioning


【解决方案1】:

引用您所依赖的较新版本的程序集的程序集使用者应在其应用程序配置文件中使用<bindingRedirect> element,如下所示:

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
            <assemblyIdentity name="myDependency"
                              publicKeyToken="32ab4ba45e0a69a1"
                              culture="neutral" />
            <bindingRedirect oldVersion="1.0.0.0"
                             newVersion="2.0.0.0"/>
         </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

请注意,myDepdendency 是您所依赖的已升级程序集的名称。

这在 Entity Framework 和 ASP.NET MVC 中常用;通过 NuGet 添加它们通常会导致将上述部分添加到您的应用程序配置文件中。

【讨论】:

  • 谢谢你,我会做一些研究,如果可行,我会接受你的回答。谢谢。
猜你喜欢
  • 2012-10-18
  • 2018-08-24
  • 1970-01-01
  • 2014-05-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2017-03-25
  • 1970-01-01
相关资源
最近更新 更多