gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:04:17 27 4
gpt4 key购买 nike

我有一个 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/

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