【发布时间】:2019-01-10 08:42:33
【问题描述】:
我已经阅读了几篇关于程序集绑定问题的帖子,并尝试了许多建议的解决方案,但都没有成功。
我有一个相对较旧的 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>
【问题讨论】: