gpt4 book ai didi

c# - 在同一解决方案中使用多个版本的 ServiceStack 程序集时出现运行时错误

转载 作者:行者123 更新时间:2023-11-30 14:46:19 25 4
gpt4 key购买 nike

以下是我的应用程序中的确切场景。

  • 项目 A 正在引用项目 B。
  • 项目 A 引用了以下 ServiceStack DLL。

ServiceStack.Interfaces.dll (4.5.4), ServiceStack.Text.dll (4.5.4),ServiceStack.Common.dll (4.5.4)

  • 项目 B 引用了以下 ServiceStack DLL。

ServiceStack.Interfaces.dll (3.9.48), ServiceStack.Text.dll (3.9.48), ServiceStack.Common.dll (3.9.48)

我知道这不是一个理想的架构,但考虑到这是由其他人开发的,我的选择非常少,我们必须以最小的影响来解决这个问题。

目前我们在尝试运行项目 A 时遇到以下错误:

enter image description here

实际上,项目结构和依赖项(即 ServiceStack 版本)是在一年多前设置的,到目前为止,该解决方案正在正确构建和运行,没有任何问题。

但是,自上周以来,所有开发人员都开始面临这个问题,这让我怀疑这个问题可能是其他原因。

我知道解决此问题的一种方法显然是将所有包升级到同一版本,但这需要更改一些代码(由于 ServiceStack 4+ 中的一些重大更改)。此外,大量的测试时间,因为项目 A 在整个解决方案的许多地方使用。

谁能提出更好的方法,或者阐明一些可以帮助我进行进一步调查的线索?

最佳答案

您不能在运行时加载同一程序集的多个版本。 Binding Redirects通常用于解决您遇到的问题。

要将程序集的所有版本重定向到特定版本,您可以将重定向添加到您的 web.config 或 app.config,如下所示。 NuGet 这样做 automatically . (将 ABCD 替换为程序集的实际公钥 token 。)

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="ServiceStack.Interfaces" publicKeyToken="ABCD" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.5.4" newVersion="4.5.4" />
</dependentAssembly>
</assemblyBinding>
</runtime>

自从您提到它一直工作到上周后,一个或两个项目中可能发生了一些变化。有可能:

  • 您之前有重定向,但它们不再存在
  • 其中一个项目升级到较新的版本(例如从 X 到 4.5.4)
  • 两个项目中引用 ServiceStack 的代码使用的 API 在两个版本(3.9.X 和 4.5.X)之间是一致的。从那时起,引入的代码使用的 API 在两个版本之间不一致。当存在向后不兼容的更改时,这可能会导致无法通过绑定(bind)重定向解决的意外行为。

关于c# - 在同一解决方案中使用多个版本的 ServiceStack 程序集时出现运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49612010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com