无法解决DLL之间的冲突



我得到的警告墙类似于我的构建中的以下内容:

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答案。根据此答案,最好的解决方案是更改引起冲突警告以引用相同版本的引用。似乎问题在于,解决方案中53个项目中的一些组件链取决于具有不同版本的不同组件。我无法分辨出哪些项目引起这些警告,并且具有约束力的重定向(我检查了每个项目中自动生成)对警告没有影响。

我该怎么办来解决这些构建警告?

它们都是相同的警告,实际上是在告诉您该怎么做。您可以清理项目中的所有参考。如果您使用的是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>

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

CSPROJ文件中有一个重复的参考。

<Reference Include="Newtonsoft.Json">
  <HintPath>..packagesNewtonsoft.Json.12.0.2libnet45Newtonsoft.Json.dll</HintPath>
</Reference>

nuget更新后,只有第一个刷新到新版本。

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

在我的情况下,将一些项目从一个大型解决方案中分解为nuget软件包后,对剩余项目的旧引用引起了问题。与Gábor的答案类似,我的CSPROJ和VBPROJ文件中有重复的引用,但它们的<ProjectReference><Reference>标签冲突。删除旧的<ProjectReference>标签已解决了问题。

最新更新