引用不同版本的Json.NET DLL

时间:2012-07-11 10:13:53

标签: asp.net-mvc json.net

我正在玩我的mvc项目。

  1. 我在项目中创建了一个名为SocialAuth.Net的软件包,该软件包又使用Newtonsoft.Json.dll 4.0.0.0(旧版)作为其依赖项之一。

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

  3. 然后问题发生了。在我的剃刀视图“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>
    

    所以,

    1. 我去了References,检查后发现Newtonsoft.Json是4.0.0.0(可能是SocialAuth.Net附带的),我删除了它,并添加了我从Nuget获得的4.5.0.0参考。

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

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

      你有没有想法如何处理这个dll问题?谢谢。

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

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

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

1 个答案:

答案 0 :(得分:0)

您可以尝试使用‑IgnoreDependencies标志安装SocialAuth.Net软件包,然后手动安装依赖项并确保只安装最新版本的Json.Net库。

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