c# - 如何处理需要不同版本程序集的两个库?

标签 c# asp.net

我有一个 C# ASP.NET 站点,它使用依赖于 JSON.NET 的第 3 方库。它引入 [Newtonsoft.Json, Version=4.0.5.0] 作为其引用的一部分。

昨天,我添加了对另一个依赖于最新版本 JSON.NET 的第 3 方库的引用。我现在陷入了这样一种境地,在任何给定时间我只能让这些库中的一个工作。

如果我只是将新引用放到项目中,调用它会失败并显示:

Could not load file or assembly 'Newtonsoft.Json, Version=9.0.0.0

...如果我更新原始库的 JSON.NET 依赖项,新代码工作正常但对旧库的调用失败:

Could not load file or assembly 'Newtonsoft.Json, Version=4.0.5.0

我能理解第一次失败。很公平,你需要一个更新的版本。但是第二个让我很困惑。版本 4 和版本 9 之间没有重大更改。它应该能够很好地使用较新的 .dll。

无论如何,我正处于受阻的地步。我已经绝育了新代码并删除了对导致问题的新库的引用。但我没有如何进行的计划。

有什么想法吗?

最佳答案

你需要一个 assembly binding redirect .例如,在您的 web.config 文件中:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
      <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

这基本上是说“如果您想使用早于 9 的任何版本的 Newtonsoft.Json,只需加载 v9。”

这只有效因为 Json.NET 没有在版本之间进行(很多?)重大更改。使用完整的 SemVer,使用主要版本号进行重大更改(并接受这种可能性),我怀疑我们将来会看到更多困难的情况......

关于c# - 如何处理需要不同版本程序集的两个库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38347644/

相关文章:

c# - 使用 FolderBrowserDialog 限制对某些文件夹的访问

c# - PropertyGrid 中的 UITypeEditor 具有多选功能

asp.net - webservice 不被 jQuery 调用

javascript - asp.net 文本框中仅允许数字或小数数据

c# - 下面的代码会导致内存泄漏吗?

c# - 使用 LINQ 过滤必要的数据

c# - 使用运算符 "="线程安全地复制整个 Queue<T> (C#)

asp.net - 从另一个项目复制页面时,Aspx 页面无法编译

c# - 是否可以在不添加服务引用的情况下访问 WCF 服务?

javascript - 了解用户何时在浏览器中查看您的站点与其他选项卡/应用程序