簡體   English   中英

Microsoft.NETCore.App 和 Microsoft.NETCore.Platforms 的傳遞依賴項如何工作

[英]How does transitive dependencies for Microsoft.NETCore.App and Microsoft.NETCore.Platforms work

我很難弄清楚傳遞依賴項的版本解析如何適用於框架“元包”。

我問的原因是,似乎每次我們引入“舊”依賴項時,例如指向netstandard2.0或 2.1 的東西,我們最終都會得到一長串過時的軟件包(我們的報告再次報告了這一點)建立管道)。

舉個例子:

給定一個 .net6 類庫,創建如下:

dotnet new classlib
dotnet add pakage System.Data.SqlClient

生成的 csproj 如下所示:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="System.Data.SqlClient" Version="4.8.3" />
  </ItemGroup>

</Project>

這似乎很好。 我有最新的 SqlClient 和我在 .net6 \o/

現在當我執行dotnet list package --outdated --include-transitive

我得到以下輸出:

Project `Outdated` has the following updates to its packages
   [net6.0]:
   Transitive Package                       Resolved   Latest
   > Microsoft.NETCore.Platforms            3.1.0      6.0.3
   > Microsoft.Win32.Registry               4.7.0      5.0.0
   > System.Security.AccessControl          4.7.0      6.0.0
   > System.Security.Principal.Windows      4.7.0      5.0.0

據我所知, Microsoft.Win32.Registry是“共享框架”的一部分,並希望它使用最新版本。

誰能解釋為什么它不使用最新版本? 或者,我如何強制 dotnet 在沒有直接依賴關系的情況下使用最新版本(如果可能的話 - 我再次試圖避免共享框架中存在的過時臨時依賴關系的長列表......)。

瀏覽各種 NuGet/dotnet Github 問題和討論。 NuGet 恢復依賴項的方式似乎是罪魁禍首。 它默認為滿足所有要求的最低版本。

“元”包實際上與 SDK 版本無關,而是直接依賴於其他包,例如Microsoft.NETCore.App ,它以Microsoft.NETCore.Platforms2.2.4或更高版本。

由於System.Data.SqlClient是一個 .NET Core 3.1 包,它指的是Microsoft.NETCore.Platforms版本3.1.0 (或更高版本)。

由於我的項目對Microsoft.NETCore.Platforms沒有很好的直接依賴,NuGet 選擇了最低的一個。

我仍然真的不明白為什么 SDK 引用不會導致直接依賴,但我想這種推理已經淹沒在一些 GitHub 問題討論中。

以下包含解析策略的說明: https ://docs.microsoft.com/en-us/nuget/concepts/dependency-resolution#dependency-resolution-rules

長話短說 - 目前只能獲得具有一長串特定依賴項的最新版本。

編輯

也許一個變體正在使用中央包管理: https ://devblogs.microsoft.com/nuget/introducing-central-package-management/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM