5

我正在玩我的 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,版本 = 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. 我去参考,检查并发现 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),然后在构建时较旧的链接在它之后。所以旧的会覆盖新的。

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

4

1 回答 1

0

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

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

于 2012-07-11T10:46:57.070 回答