发布到Twitter时需要“无法加载文件或程序集”Newtonsoft.Json,Version = 4.0.3.0, Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'或其中一个 依赖。定位程序集的清单定义没有 匹配程序集引用。 (来自HRESULT的异常:0x80131040)“。
并且相同的程序集(但是diff版本4.0.0.0)被用作facebook C#api(dll)的依赖程序集。但是,上述程序集(4.0.3.0)对两种情况都不起作用(即发布到twitter和登录facebook)。为了解决这个问题,创建了一个单独的项目,用于发布到twitter并单独引用程序集(4.0.3.0)(在twitter发布的项目中)。另外一个版本(4.0.0.0)作为参考添加在facebook的主项目中但仍然出现错误。如果Twitter项目被禁用并运行,那么facebook登录工作正常并且反之亦然。
我做了很多研究并尝试了以下内容。
删除临时的asp.net文件 清洁解决方案 重启电脑
甚至尝试从gac卸载程序集(但是没有在那里注册)。
请帮助我,因为它不起作用。 谢谢, 小号
答案 0 :(得分:8)
目前尚不清楚项目的关系是什么,或者何时发生此错误,但这是一个猜测。
你有3个项目是facebook项目(参考4.0.0.0版本),twitter项目(参考4.0.3.0版本),以及一个主要项目,它们都是这两个项目的参考。您可以构建此解决方案,但是当您运行程序集绑定时将失败。为什么?因为默认行为是在运行之前在本地复制程序集。会发生的是第一个将副本构建到bin(比如twitter)的项目,然后第二个项目构建(facebook),然后是main。但是,在此结束时,4.0.0.0版本是坐在bin文件夹中。当您运行时,只要您从twitter调用某些尝试使用问题程序集的内容,绑定就会失败,因为它可以访问4.0.3.0版本的程序集。
有很多方法可以解决这个问题。一种是在GAC中注册两个程序集。如果这不可行,那么请查看配置文件中的assembly binding redirection。另一种方法是注册AssemblyResolve event并以编程方式加载程序集。
答案 1 :(得分:8)
将以下内容添加到app.config文件中:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
在<configuration></configuration>
代码
答案 2 :(得分:0)
在所有项目中安装Newtonsoft软件包。
Install-Package Newtonsoft.Json -Version 8.0.3