【问题标题】:NuGet package dependency version clarificationNuGet 包依赖版本说明
【发布时间】:2021-12-18 05:47:35
【问题描述】:

在 NuGet 包中,在其 .nuspec 文件中,包依赖项是基于每个目标框架指定的。 例如,在 System.Collections.NonGeneric 包中,这里是它的 TF 依赖项:

<dependencies>
  <group targetFramework="MonoAndroid1.0" />
  <group targetFramework="MonoTouch1.0" />
  <group targetFramework=".NETFramework4.6" />
  <group targetFramework=".NETStandard1.3">
    <dependency id="System.Diagnostics.Debug" version="4.3.0" exclude="Compile" />
    <dependency id="System.Globalization" version="4.3.0" />
    <dependency id="System.Resources.ResourceManager" version="4.3.0" exclude="Compile" />
    <dependency id="System.Runtime" version="4.3.0" />
    <dependency id="System.Runtime.Extensions" version="4.3.0" exclude="Compile" />
    <dependency id="System.Threading" version="4.3.0" exclude="Compile" />
  </group>
  <group targetFramework="Xamarin.iOS1.0" />
  <group targetFramework="Xamarin.Mac2.0" />
  <group targetFramework="Xamarin.TVOS1.0" />
  <group targetFramework="Xamarin.WatchOS1.0" />
</dependencies>

它当然不包含所有 TFM,所以我的问题是:如果我的调用应用程序针对 .NET Framework 4.6.1 (.NET Standard 1.4) 会发生什么?由于 .NET Standard 1.4 >= 1.3,是否仍需要下载 6 个 System.* 包?或者因为我没有专门针对 .NET Standard 1.3 TFM,所以我的项目没有依赖项?感谢您的澄清。

【问题讨论】:

    标签: dependencies nuget nuget-package nuget-spec target-framework


    【解决方案1】:

    NuGet 始终选择“最接近”(小于或等于的最高版本)目标框架。它不必是完全匹配的。因此,包没有指定 netstandard1.4 依赖项并不重要。它列出了 netstandard1.3,因此如果它是最佳匹配,NuGet 将选择它。

    但是,最佳匹配也考虑目标框架标识符。因此,.NET Framework 4.6.1 项目将匹配 .NET Framework 4.6 依赖组,因此不会考虑 .NET Standard 依赖组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      • 2019-08-13
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-19
      相关资源
      最近更新 更多