我已经阅读了几篇关于程序集绑定问题的帖子,并尝试了许多建议的解决方案,但都没有运气。
我有一个相对较旧的 asp.net 网络表单网站。它依赖于 .Net Framework 4.6 分析程序集,而后者又依赖于 NewtonSoft.Json。该 Analytics 程序集是我们自己的程序集之一,是使用 NewtonSoft.Json v7.0.1 构建的。这是驻留在网站的 bin 文件夹中的程序集版本。
我有一个较新的网站,一个 Angular SPA,它依赖于 .Net Framework WebApi 服务。这些服务依赖于调用单独的日志服务的日志助手组件。日志帮助程序组件依赖于 Microsoft.AspNet.WebApi.Client 进行服务调用,它依赖于 System.Net.Http.Formatting,它依赖于 NewtonSoft.Json v6.0.4。
当我尝试在网站中使用新的日志记录助手组件时,在运行时,日志记录失败,说它无法加载 NewtonSoft.Json 的 v6.0.0.0 或其依赖项之一。
如果我将 v7.0 文件放在网站 bin 文件夹中,则网站将失败,因为 Analytics 程序集无法加载 NewtonSoft.Json 的 v7.0.0.0 或其依赖项之一。
理想情况下,我想让 Microsoft.AspNet.WebApi.Client 和 System.Net.Http.Formatting 与新版本的 NewtonSoft.Json 很好地配合使用,但我对这些程序集的播放方式没有太多控制。我已经尝试使用 NewtonSoft.Json v6.0.4 重建我的 Analytics 组件,但是当它被构建和部署时,不知何故,它仍然最终在 Web 服务器上寻找 v7.0.0.0。
我觉得我被困在一块岩石和一个坚硬的地方之间。我可以让我的分析工作或我的日志记录工作,但我不能同时工作。关于 a) 寻求解决方案的方向 - 让我的 Analytics 组件接受旧版本或让我的 Logging 组件与新版本一起使用以及 b) 如何完成其中任何一种方法的任何建议?
更新 1 - 我尝试过的一些事情超出了我上面描述的内容:在我的日志记录助手组件 .csproj 项目文件中,我尝试从我的 NewtonSoft.Json 参考中删除版本信息。我使用 NewtonSoft.Json v7.0 文件将它部署到网站中,但它仍然失败,说它无法加载 v6.0。我尝试使用程序集绑定日志查看器 fuslogvw.exe。也许我没有正确使用它,但我可以重现我的程序集绑定错误,并且在程序集绑定日志查看器中什么也没看到。
更新 2 - 我尝试在我的日志帮助程序组件中添加一个程序集绑定重定向,将其从 6.0.0.0 重定向到 7.0.0.0,但是当我构建组件并将其放入网站 bin 文件夹中时,该文件夹现在具有 NewtonSoft.Json 7.0文件,记录器仍然无法说它可以加载 v6.0.0.0。难道就没有办法了吗?
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="NewtonSoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
<bindingRedirect oldVersion="6.0.0.0"
newVersion="7.0.0.0" />
</dependentAssembly>
</assemblyBinding>
更新 3 - 下面是来自日志帮助程序组件的 packages.config。我相信 packages.config 中的所有内容都是基于我添加的 Microsoft.AspNet.WebApi.Client 包。根据 NuGet 上的包信息,它应该适用于 NewtonSoft.Json >= 6.0.4,但它总是无法查找 6.0.0.0。
<packages>
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.6" targetFramework="net461" />
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.5" targetFramework="net461" />
<package id="Microsoft.Net.Compilers" version="2.4.0" targetFramework="net461" developmentDependency="true" />
<package id="Newtonsoft.Json" version="6.0.4" targetFramework="net461" />
<package id="System.Net.Http" version="2.0.20126.16343" targetFramework="net461" />
</packages>