解决NET4.0项目中的NewtonSoft依赖项

时间:2016-04-19 14:20:50

标签: c# visual-studio-2013 json.net

我有一个项目,比方说项目A.它是一个dll(类库)项目。目标框架是.NET 4.0(不是客户端配置文件)。我在这个项目中添加了Azure存储的块,它本身添加了许多其他引用。项目构建没有问题。

在同一个解决方案中,我有另一个项目,比如项目B.项目B也是一个dll(类库)项目。目标框架也是.NET 4.0(不是客户端配置文件)。它还有一堆对其他库的引用,但它本身构建得很好。

当我在项目B中添加对项目A的引用时出现问题。它不再编译了,问题的根源是我认为,与编译开始时这些警告的系列相关< / p>

1&gt; C:\ Program Files(x86)\ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets(1697,5):警告MSB3275:主要引用“...”无法解析,因为它具有间接依赖于程序集“Newtonsoft.Json,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed”,它是针对“.NETFramework,Version = v4.5”框架构建的。这是比当前目标框架“.NETFramework,Version = v4.0”更高的版本。

项目B实际上在许多地方使用JSON NewtonSoft 4.5.0.0,但我知道Azure块需要JSON NewtonSoft 6.0。我不明白的是为什么项目A在NET4.0中正确编译,但在项目B中链接时会产生错误。

我需要在项目B中继续使用NewtonSoft 4.5.0.0(我不可能将项目B升级到JSON NewtonSoft 6.0)。

我也无法升级到NET4.5

我在... \ packages \ Newtonsoft.Json.6.0.8 \ lib中找到了一些与牛顿软件的net45 dll相关的文件夹,并在重建之前删除了它们,没有用。

1 个答案:

答案 0 :(得分:1)

这是Visual Studio自身创建的烦人问题。

长话短说:

  • Visual Studio发现需要添加到“bin”的依赖项才能使您的应用程序正常工作
  • 他在项目解决方案的任何bin文件夹中找到的第一个dll
  • 如果找到的第一个DLL与版本不匹配,则会在编译时抛出此错误

我是如何解决这个问题的:

  • 在所有项目中查找所有具有错误版本的DLL(右键单击 - &gt;属性)并删除它们,只留下具有正确版本的DLL
  • 清理并重建

另一种解决方法:

  • 使用nuget更新依赖项:它将使用最新版本并替换所有项目中的所有依赖项,允许编译