为什么在 .Net 4.6.1 中 System.Memory 依赖于 System.Numerics.Vectors,而在 .Net 4.6 中却没有?

4
这些是Nuget包的依赖项。我们使用旧版本的.Net框架,我发现如果我使用4.6.1,就会有一个额外的依赖项(我认为是一个框架DLL),在4.5- > 4.6中不需要。
这似乎与正常情况相反,即较新版本的.Net需要更多的依赖项。
为什么会这样,并且我会看到任何差异,例如性能方面吗?
附加依赖关系如下图所示: Additional dependencies
1个回答

4
“似乎与正常情况相反,较新版本的 .Net 需要更多的依赖关系。”
“System.Memory” 包包含以下目标框架的库:
- .NET Framework 4.6.1 - .NET Standard 2.1 - .NET Standard 2.0 - .NET Standard 1.1
.NET Framework 4.5
当在 .NET Framework 4.5 项目中使用该包时,会使用来自 .NET Standard 1.1 目标的 “System.Memory.dll”,因为这是它可以使用的最高版本,参见此 reference。但是,该版本不使用 Vector 或其他矢量类型。因此,它不依赖于 System.Numerics.Vectors。
.NET Framework 4.6
与.NET Framework 4.5相同,因为.NET Standard 1.3是.NET Framework 4.6项目可以使用的最高版本。由于仅提供了.NET Standard 1.1版本,因此它将回退到该版本。
.NET Framework 4.6.1
在.NET Framework 4.6.1项目中使用包时,将使用相应版本的System.Memory.dll。该版本使用Vector类型,该类型仅在以下情况下可用:
.NET Core >= 1.0 .NET Standard >= 2.1 Preview System.Numerics.Vectors NuGet包
.NET Framework 4.6.1目标依赖于System.Numerics.Vectors包,否则将不可用。
引用:“[...]我会看到任何差异例如性能吗?”
可能会有性能优势,因为Vector<T>是一种 SIMD加速类型。它被用在一个跨度的帮助类中,在那里会检查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库时存在几个问题。[...]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接