1. 程式人生 > >asp.net core 3.1 引用的元包dll版本相容性問題解決方案

asp.net core 3.1 引用的元包dll版本相容性問題解決方案

自從.netcore 3.1出來後,大家都想立馬升級到最新版本。我也是如此,微軟也對.netcore 3.1的官方元件不斷升級,幾乎每隔幾天就會有部分元包可以升級。每次開啟Nuget包管理器,“更新”的tab處總會有個數字暗示著你快點升級!一向有程式碼潔癖的同學(包括我),都會毫不猶豫的點選“全部升級”。我們總是幻想著使用更高的版本,可以獲取更牛的功能和更快的效能。

可惜,夢想是好的,結局卻是殘酷的。升級後,卻發現有很多錯誤。.netcore 3.1的確在效能方面有極大的提升,各個方面都比.netcore 2.2強多了,但是,其生態還沒有完全的發展起來,很多第3方元件依舊還是netcore2.2的版本甚至更低。這個時候最讓人頭疼的就是包的版本問題,比如如下錯誤:

 

MuXue.Zyiz.Net.WebAPI/MuXue.Zyiz.Net.WebAPI.csproj : error NU1605: Detected package downgrade: System.Threading.ThreadPool from 4.3.0 to 4.0.10. Reference the package directly from the project to select a different version. 

 

error NU1605: Detected package downgrade的中文意思是“錯誤NU1605:檢測到包降級 ”。大家都知道,元包裡還包含很多子的元件,多個元包之間引用的子元件版本不一致,就會造成這個錯誤。這種情況在.netcore 3.1目前的情況下經常出現。

根據官方教程的知道方案得出解決方案如下:

強制將版本不一致的包升級到統一的版本,(比如我們這裡的System.Threading.ThreadPool)

雙擊MuXue.Zyiz.Net.WebAPI.csproj專案,

 <ItemGroup>
    <PackageReference Include="AutoMapper" Version="9.0.0" />
    <PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="7.0.0" />
    <PackageReference Include="Consul" Version="0.7.2.6" />
    <PackageReference Include="FluentValidation.AspNetCore" Version="8.6.1" />
    <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.1" />
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.1" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.1" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.1" />
    <PackageReference Include="NLog.Web.AspNetCore" Version="4.9.0" />
    <PackageReference Include="SkyAPM.Agent.AspNetCore" Version="0.9.0" />
    <PackageReference Include="Swashbuckle.AspNetCore" Version="5.0.0" />
    <PackageReference Include="System.Text.Json" Version="4.7.0" />
    <PackageReference Include="System.Net.NameResolution" Version="4.3.0" />
    <PackageReference Include="System.Threading.ThreadPool" Version="4.3.0" />
  </ItemGroup>

 

看到這行程式碼:

 

<PackageReference Include="System.Threading.ThreadPool" Version="4.3.0" />

 

將這個元件統一指定為4.3.0版本,問題就解決了。

&n