【问题标题】:Why does System.Memory have a dependency on System.Numerics.Vectors in .Net 4.6.1 but not in .Net 4.6?为什么 System.Memory 依赖于 .Net 4.6.1 中的 System.Numerics.Vectors 而不是 .Net 4.6?
【发布时间】:2020-08-04 17:58:23
【问题描述】:

这些是 Nuget 包 System.Memory 的依赖项。我们使用较旧的 .Net 框架版本,我注意到如果我使用 4.6.1,则对 System.Numerics.Vectors(我认为是框架 DLL)有额外的依赖关系,这在 4.5->4.6 中是不需要的。

似乎与正常情况相反,较新版本的 .Net 需要更多的依赖项。

为什么会这样,我会看到任何不同吗?在性能方面?

【问题讨论】:

    标签: c# .net nuget


    【解决方案1】:

    似乎与正常情况相反,较新版本的 .Net 需要更多依赖项。

    System.Memory 包包含以下目标框架的库。

    • .NET Framework 4.6.1
    • .NET 标准 2.1
    • .NET 标准 2.0
    • .NET 标准 1.1

    .NET 框架 4.5

    在 .NET Framework 4.5 项目中使用包时,会使用 .NET Standard 1.1 目标中的System.Memory.dll,因为这是它可以使用的最高版本,请参阅此@ 987654321@。但是,此版本不使用Vector<T> 或其他向量类型。因此,它不依赖于System.Numerics.Vectors

    .NET 框架 4.6

    与 .NET Framework 4.5 相同,因为 .NET Standard 1.3 是 .NET Framework 4.6 项目可以使用的最高版本。由于只提供了一个 .NET Standard 1.1 版本,它将回退到那个版本。

    .NET 框架 4.6.1

    在 .NET Framework 4.6.1 项目中使用包时,使用对应版本的System.Memory.dll。此版本使用 Vector<T> 类型,仅适用于:

    • .NET Core >= 1.0
    • .NET Standard >= 2.1 预览版
    • System.Numerics.Vectors NuGet 包

    .NET Framework 4.6.1 目标依赖于 System.Numerics.Vectors 包,否则它将不可用。

    [...] 我会看到任何不同吗?在性能方面?

    可能会有性能优势,因为Vector<T>SIMD-accelerated type。它用于 spans 的辅助类中,其中检查了Vector.IsHardwareAccelerated,所以我想使用Vector<T> 背后有一个与性能相关的原因。

    奖金回合

    如果该包可以使用 .NET Standard,为什么还要有一个单独的 .NET Framework 4.6.1 目标?这在链接参考本身中得到了最好的解释。

    [...] 虽然 NuGet 认为 .NET Framework 4.6.1 支持 .NET Standard 1.5 到 2.0,但使用为 .NET Framework 4.6.1 项目中的这些版本构建的 .NET Standard 库存在几个问题. [...]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-18
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 2016-10-26
      • 1970-01-01
      相关资源
      最近更新 更多