繁体   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