无法解决dll之间的冲突

时间:2016-06-23 17:43:12

标签: c# build warnings

我的构建中出现了类似于以下内容的警告:

No way to resolve conflict between "Newtonsoft.Json, Version=7.0.0.0" 
and "Newtonsoft.Json, Version=6.0.0.0". 
Choosing "Newtonsoft.Json, Version=7.0.0.0" arbitrarily.

我收到以下dll的其他警告(重复是有意的):

Microsoft.Owin
System.Web.Http
Newtonsoft.Json
System.Net.Http.Formatting
Microsoft.Owin
Microsoft.ApplicationInsights

以及每条警告的匹配消息:

Consider app.config remapping of assembly to solve conflict and get rid of warning.

最后,我得到了这个冲突:

Microsoft.Common.CurrentVersion.targets Found conflicts between 
different versions of the same dependent assembly. 
Please set the "AutoGenerateBindingRedirects" property to true 
in the project file.

我已经阅读了这些消息可以找到的每个堆栈溢出和MSDN答案。根据{{​​3}},最佳解决方案是更改导致冲突警告引用相同版本的引用。似乎问题是来自解决方案中53个项目中的一些项目的组件链依赖于具有不同版本的不同组件。我无法分辨哪些项目会导致这些警告,并且绑定重定向(在我检查的每个项目中自动生成)对警告没有影响。

如何解决这些构建警告?

3 个答案:

答案 0 :(得分:2)

它们都是相同的警告,实际上是在告诉你该怎么做。您可以清理项目中的所有引用。如果您正在使用NuGet,这不应该是一个太大的问题。进入管理NuGet包。您应该在列表中看到重复的包。将对旧包的引用移动到包的新版本。这是解决冲突的一种方法。

第二种方法是为所有冲突的程序集添加绑定重定向。这是一个Json.net重定向的例子。

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

答案 1 :(得分:1)

我遇到此警告并找到了解决方法。

csproj文件中存在重复的引用。

<Reference Include="Newtonsoft.Json">
  <HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>

在更新NuGet之后,只有第一个刷新到新版本。

当我删除第二个警告时,警告消失了。

答案 2 :(得分:0)

就我而言,在将一些项目从一个大型解决方案拆分为 NuGet 包后,对剩余项目的旧引用导致了问题。与 Gábor's answer 类似,我的 csproj 和 vbproj 文件中存在重复引用,但它们冲突了 <ProjectReference><Reference> 标签。删除旧的 <ProjectReference> 标签解决了该问题。