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