【问题标题】:Newtonsoft.Json.dll conflicts between Visual Studio 12.0 Blend and MVC 5 web project VS 2013Visual Studio 12.0 Blend 和 MVC 5 Web 项目 VS 2013 之间的 Newtonsoft.Json.dll 冲突
【发布时间】:2017-08-26 13:40:30
【问题描述】:

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

然后我遇到了这个错误

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

有没有其他人遇到过这个。

【问题讨论】:

    标签: json.net visual-studio-2013 asp.net-mvc-5


    【解决方案1】:

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

    <ItemGroup>
      <Reference Include="Newtonsoft.Json">
        <HintPath>..\packages\Newtonsoft.Json.5.0.6\lib\net45\Newtonsoft.Json.dll</HintPath>
      </Reference>
      <Reference Include="Owin">
        <HintPath>..\packages\Owin.1.0\lib\net40\Owin.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 -> Projects and Solutions -> Build and Run -> 并将“MSBuild project build output verbosity”设置为“Detailed”并重建项目。)

    【讨论】:

    • 我在这里很困惑。我在我的 csproj 文件中找到了两个引用。我删除了旧版本。没有变化。
    • 也为我工作。尊重!
    • 干得好,你是怎么想出来的?
    • 干得好..拯救了我的一天
    【解决方案2】:

    我根本不使用 Blend,所以我将 Blend Newtonsoft.Json.dll 重命名为“Newtonsoft.Json.dll.bak”。这在 Marcus 的 Connect bug 中被提及为一种解决方法。 Marcus 继续说,Blend 可能不会经常使用 Newtonsoft.Json.dll,因此即使您使用 Blend,此修复也可能不会影响您的工作。

    【讨论】:

    • 我查看了它指向 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Blend\Newtonsoft.Json.dll 而不是包文件夹的引用 dll 路径,有没有办法修改这条路径?
    • 是的,这是我添加 .bak 的文件,您无法更改路径 - 奇怪的错误。支持 Connect 错误,说您可以重现它,并将其添加到您的监视列表中。
    • 这不是正确的答案。这可能有效,但它是错误的,因为它可能会产生未知的后果。正确的方法在这里:stackoverflow.com/a/21776577/103302
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      此类问题主要发生在使用 Visual Studio 社区时。在 Visual Studio Professional 上找不到相同的问题。

      我遇到这个问题是因为,我正在使用专业社区。​​p>

      它发生的原因是,在编译项目时,它会从两个位置获取引用 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.0\Blend\Newtonsoft.Json.dll' and '{path to my project}\packages\Newtonsoft.Json.6.0.1\lib\net45\Newtonsoft.Json.dll
      

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

      【讨论】:

        猜你喜欢
        • 2015-08-13
        • 1970-01-01
        • 1970-01-01
        • 2013-01-28
        • 2019-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-25
        相关资源
        最近更新 更多