引用不同版本的Json.NET DLL

Tom*_*Tom 5 asp.net-mvc json.net

我正在玩我的mvc项目.

  1. 我将一个名为SocialAuth.Net的软件包编入项目中,然后使用Newtonsoft.Json.dll 4.0.0.0(较旧版本)作为其依赖项之一.

  2. 然后因为我自己也需要Json.Net,我想要一个更新的版本,所以我Nugeted Json.NET,它有一个更新的版本4.5.0.0(更新).

然后问题发生了.在我的剃刀视图"ViewBag.Title = ...."中有红色下划线说:

警告1 c:\ users\admin\documents\visual studio 2010\Projects\WebApp\WebApp\Views\Home\Index.cshtml:ASP.NET运行时错误:无法加载文件或程序集'Newtonsoft.Json,Version = 4.5. 0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'或其中一个依赖项.定位的程序集的清单定义与程序集引用不匹配.(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>
Run Code Online (Sandbox Code Playgroud)

所以,

  1. 我去了References,检查并发现Newtonsoft.Json是4.0.0.0(可能是随SocialAuth.Net一起提供的),我删除了它,并添加了我从Nuget获得的4.5.0.0参考.

  2. 我进入了WebApp/bin/debug /文件夹并删除了所有内容,然后重新构建了项目.

但是,一旦我重建了webapp,Newton.Json 4.0.0.0就会回到bin/debug /,无论我如何手动将它引用到新的Nuget 4.5.0.0.而同样的错误又回来了.我被卡住了.

你有没有想法如何处理这个DLL问题?谢谢.

编辑-----------------------------------

经过一番思考后,我明白这是因为首先将Json.Net(较新的4.5)链接起来,然后在构建时将较旧的Json.Net链接到它之后.所以较旧的人会覆盖较新的那个.

我不熟悉GAC安装,但知道我可以打开那些蠕虫并在那里安装2个版本,我不想这样做,因为这意味着我必须对我部署Web应用程序的每台机器都这样做.有没有办法玩web.config并解决这个问题?

Joã*_*elo 0

您可以尝试使用以下命令安装 SocialAuth.Net 软件包\xe2\x80\x91IgnoreDependencies标志安装 SocialAuth.Net 包,然后手动安装依赖项并确保仅安装最新版本的 Json.Net 库。

\n\n

然后在运行时,SocialAuth.Net 包将遵循程序集重定向并加载 Json.Net (v4.5),而不是旧版本。

\n

  • 我没有想法,所以在缺乏更好的选择的情况下,唯一的选择总是看起来不错。:) (2认同)