Newtonsoft.Json.dll Visual Studio 12.0 Blend和MVC 5 Web项目VS 2



我在VS5中有一个 asp.net 的mvc 2013项目,我将所有内容的nuget包更新为最新版本

然后我遇到了这个错误

Error   2   The type 'Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver' exists in both 'c:Program Files (x86)Microsoft Visual Studio 12.0BlendNewtonsoft.Json.dll' and '{path to my project}packagesNewtonsoft.Json.6.0.1libnet45Newtonsoft.Json.dll'

还有其他人遇到过这种情况吗?

我得到这个错误,因为我有一个额外的

<ItemGroup>
  <Reference Include="Newtonsoft.Json">
    <HintPath>..packagesNewtonsoft.Json.5.0.6libnet45Newtonsoft.Json.dll</HintPath>
  </Reference>
  <Reference Include="Owin">
    <HintPath>..packagesOwin.1.0libnet40Owin.dll</HintPath>
    <Private>True</Private>
  </Reference>
</ItemGroup>

在我的 Web.csproj 中,直接在通常的引用下方,该引用已经包含对最新 Newtonsoft.Json.dll 的正确引用。在 VS 中仅显示对较新程序集的引用。

解决方案是:我将有效的 Owin 引用移动到主引用 ItemGroup 并删除了过时的 Newtonsoft.Json.dll 引用(手动编辑 csproj 文件)。

错误消息的原因:在我的机器上,旧的Newtonsoft.Json.dll的HintPath不存在,因此MSBuild正在寻找其他地方并采用了Blend版本。

(顺便说一句:若要了解 MSBuild 查找某个程序集的原因和位置,请使用 TOOLS -> Options -> Project and Solutions -> Build and Run -> 并将"MSBuild 项目生成输出详细程度"设置为"详细"并重新生成项目。

我根本不使用Blend,所以我将Blend Newtonsoft.Json

.dll重命名为"Newtonsoft.Json.dll.bak"。这在Marcus的Connect错误中被提及为解决方法。Marcus继续说,Blend可能不会使用Newtonsoft.Json.dll所以即使你使用Blend,这个修复程序也不会影响你的工作。

根本原因是@blueling的回答,我将引用:

错误消息的原因:在我的机器上旧的提示路径 Newtonsoft.Json.dll不存在,因此MSBuild正在寻找 其他地方并采用了混合版本。

我只是想把它作为一个单独的答案,以便更容易找到,因为人们可能不会阅读他/她的完整答案。

这种类型的问题主要发生在使用Visual Studio社区时。 同样的问题,你不会在Visual Studio Professional上找到。

有这个问题是因为,我正在使用专业社区。

发生这种情况是因为,在编译项目时,它将从两个位置获取引用,其中一个位置来自1). "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Blend\Newtonsoft.Json.dll"

2). 其他来自您的解决方案/项目参考。在这种情况下,两个版本都不同

它给了

The type 'Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver' exists in both 'c:Program Files (x86)Microsoft Visual Studio 12.0BlendNewtonsoft.Json.dll' and '{path to my project}packagesNewtonsoft.Json.6.0.1libnet45Newtonsoft.Json.dll

获取项目编译的唯一方法是重命名 Blend 文件夹中的 NewtonSoft dll。

相关内容

  • 没有找到相关文章

最新更新