我正在玩我的mvc项目。
-
我在项目中Nugete了一个名为SocialAuth.Net的包,该包反过来使用Newtonsoft.Json.dll 4.0.0.0(旧版本)作为其依赖项之一。
-
然后,因为我自己也需要Json.Net,我想要一个更新的版本,所以我NugetedJson.Net,它有一个更新版本4.5.0.0(更新)。
然后问题就出现了。在我的剃刀视图"ViewBag.Title=…"中,它有红色下划线,上面写着:
警告1 c:\users\admin\documents\visual studio2010\Projects\WebApp\WebApp\Views\Home\Index.chtml:ASP.NET运行时错误:无法加载文件或程序集'Newtonsoft.Json,版本=4.5.0.0,文化=中性,PublicKeyToken=30ad4fe6b2a6eed'或它的一个依赖项。找到的程序集的清单定义与程序集引用不匹配。(HRESULT中的异常:0x80131040)
这是我的web.config的Json部分:
<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>
所以,
我去了References,检查并找到了Newtonsoft.Json是4.0.0.0(可能是SocialAuth.Net附带的),我删除了它,并添加了我从Nuget获得的4.5.0.0引用。
我进入WebApp/bin/debug/文件夹,删除了所有内容,然后重新构建了项目。
然而,一旦我重建了Web应用程序,Newton.Json 4.0.0.0就会返回到bin/debug/中,无论我如何手动将其引用到新的Nuget 4.5.0.0中。并且同样的错误再次出现。我被卡住了。
你知道如何处理这个dll问题吗?非常感谢。
编辑-------------------------------
经过一番思考,我明白了这是因为Json.Net(更新的4.5)首先被链接,然后在构建时旧的在它后面。所以旧的覆盖了新的。
我不熟悉GAC的安装,但我知道我可以打开那罐蠕虫并在那里安装2个版本,但我不想这样做,因为这意味着我必须对部署web应用程序的每台机器都这样做。有没有办法处理web.config并绕过它?
您可以尝试安装带有‑IgnoreDependencies
标志的SocialAuth.Net包,然后手动安装依赖项,并确保只安装最新版本的Json.Net库。
然后在运行时,SocialAuth.Net包将遵循程序集重定向并加载Json.Net(v4.5),而不是旧版本。