我在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 项目生成输出详细程度"设置为"详细"并重新生成项目。
.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。