解决 .net core 中 nuget 包版本冲突问题

今天在一个 asp.net core 项目中遇到了 nuget 包版本冲突的问题,错误信息以下:app

Version conflict detected for Microsoft.AspNet.WebApi.Client. Reference the package directly from the project to resolve this issue. 
 Cnblogs.Zzk.ServiceAgent -> Cnblogs.Net 2.0.1 -> Microsoft.AspNet.WebApi.Client (>= 5.2.6) 
 Cnblogs.Zzk.Web -> Microsoft.AspNetCore.App 2.1.0-rc1-final -> Microsoft.AspNet.WebApi.Client (= 5.2.4)

Cnblogs.Zzk.Web 是一个基于 asp.net core 2.1 rc 1 的项目,所引用的 nuget 包 Microsoft.AspNetCore.App 引用了 Microsoft.AspNet.WebApi.Client 5.2.4 ,而引用的 Cnblogs.Zzk.ServiceAgent 项目所引用的 nuget 包 Cnblogs.Net 则引用了 Microsoft.AspNet.WebApi.Client 5.2.6asp.net

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <ProjectReference Include="..\Cnblogs.Zzk.ServiceAgent\Cnblogs.Zzk.ServiceAgent.csproj">
    </ProjectReference>
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" />
  </ItemGroup>
</Project>

版本冲突就是因为这两个地方引用的 Microsoft.AspNet.WebApi.Client 版本不一致。this

要解决这个版本冲突问题有三个方法:spa

1)升级 Microsoft.AspNetCore.App 所引用的 Microsoft.AspNet.WebApi.Client ;.net

2)降级 Cnblogs.Net 所引用的 Microsoft.AspNet.WebApi.Client ;code

3)既不升级也不降级,经过某种兼容处理方式解决版本冲突。xml

第 1 种方法此路不通,Microsoft.AspNetCore.App 不是咱们本身的项目。blog

第 2 种方法退而求次,但不想由于这个问题而降级。get

因而,选择了第 3 条路。it

若是是 .net framework 项目能够经过 assembly  binding redirect 机制解决,添加下面的配置便可

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="" publicKeyToken="" />
      <bindingRedirect oldVersion="" newVersion="" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

但 .net core 中根本没有 assembly  binding redirect 机制,那怎么办?

很是好办,只要认真看了错误提示信息:

Version conflict detected for Microsoft.AspNet.WebApi.Client. Reference the package directly from the project to resolve this issue.

只要在 Cnblogs.Zzk.Web 项目中添加 Microsoft.AspNet.WebApi.Client 的引用,而且使用冲突中的最高版本,好比这里引用 5.2.6 ,

<ItemGroup>
  <PackageReference Include="Microsoft.AspNet.WebApi.Client" Version="5.2.6" />
</ItemGroup>

就能够简单粗暴地解决 nuget 包版本冲突问题。

相关文章
相关标签/搜索