今天在一個 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 包版本衝突問題。