为什么 System.Security.Cryptography.Xml 不是 .NET Standard 2.0 的一部分?
Why is System.Security.Cryptography.Xml not part of .NET Standard 2.0?
命名空间 System.Security.Cryptography
中的几乎所有类型都是 .NET Standard 2.0 的一部分,但 System.Security.Cryptography.Xml one needs to take a dependency on the extension package by the same name 除外,这一事实让我有些困惑。
有人可以解释一下这里的困难吗?如果问题只是人和时间不够,是否有任何计划将其包含在下一版本的 .NET Standard 中?
我的印象是您认为 "can" 的东西会进入 netstandard,但实际上 "have to".
更像是进入 netstandard
虽然这不是实际过程,但一个好的模型是:
- 规则0:如果ECMA-335规范中提到了该类型,则属于netstandard。
- 这些类型与其运行时(clr.dll、核心clr.dll、libcoreclr.so 等)有特殊的交互,因此无法通过 NuGet 包合理地定义。
- 规则 1:如果 "foundational" 类型在(几乎?)所有操作环境中都有意义,但系统库最好 [=71=],它可能属于 netstandard(因为它很难交付有效地通过 NuGet)。
- 所有加密算法实现都在这个桶中
- 还有网络
- 全球化也是如此
- 规则 2:如果某个类型已存在于 netstandard 中,则该类型需要在 netstandard 中。
- 密码学基础类
- 流
- 好的,几乎所有的网络标准
- 举个例子:netstandard3.0 当前提议的更改包括定义.NET Core 添加到现有网络标准类型的 (ReadOnly)Span 和 (ReadOnly)Memory-based 方法,这意味着 (ReadOnly)Span 和(只读)内存必须从 "on netstandard" 变为 "in netstandard"。
netstandard 中定义的事物需要兼容的实现来定义其中的所有事物(尽管“throw new PlatformNotSupportedException();
”是任何事物的合法实现)。所以 .NET Framework、.NET Core、Mono、Xamarin、Unity(以及我想不到的任何其他)都需要定义一个东西。有时 code 在这些运行时之间共享,但每个运行时都有自己的功能实现;并且修复其中一个中的错误需要修复所有 5+ 中的错误(或者,至少,发布对所有 5+ 的更新)。
另一方面,当功能可以纯粹根据 netstandard 中已有的东西交付时,这些东西非常适合托管在 NuGet 上,并且相同的 DLL 可以加载到所有 5+ 运行时并正常工作.当一个错误被修复时,它会在所有地方得到修复1,2。所有人都有很多好处。这些库使用 netstandard 版本的 Target Framework Moniker (TFM),然后它们有效地扩展了 netstandard。唯一的缺点是消费者需要显式地添加包引用来构建。 System.Security.Cryptography.Xml
和 System.Security.Cryptography.Pkcs
都在这个桶中。
1。 .NET Framework(或 Xamarin 等)中已有的类型仍然必须在该运行时中独立修复,因为 NuGet 包表示忽略其内容并使用这些平台上的现有实现。
2。对于 .NET Core,当需要一个程序集作为运行时的实现细节时,它会包含在 Microsoft.NETCore.App
中,而 NuGet 包表示忽略其内容并使用该平台上的现有实现,这意味着该错误得到已修复一次,但必须同时作为 .NET Core 更新和 NuGet 包发布。
命名空间 System.Security.Cryptography
中的几乎所有类型都是 .NET Standard 2.0 的一部分,但 System.Security.Cryptography.Xml one needs to take a dependency on the extension package by the same name 除外,这一事实让我有些困惑。
有人可以解释一下这里的困难吗?如果问题只是人和时间不够,是否有任何计划将其包含在下一版本的 .NET Standard 中?
我的印象是您认为 "can" 的东西会进入 netstandard,但实际上 "have to".
更像是进入 netstandard虽然这不是实际过程,但一个好的模型是:
- 规则0:如果ECMA-335规范中提到了该类型,则属于netstandard。
- 这些类型与其运行时(clr.dll、核心clr.dll、libcoreclr.so 等)有特殊的交互,因此无法通过 NuGet 包合理地定义。
- 规则 1:如果 "foundational" 类型在(几乎?)所有操作环境中都有意义,但系统库最好 [=71=],它可能属于 netstandard(因为它很难交付有效地通过 NuGet)。
- 所有加密算法实现都在这个桶中
- 还有网络
- 全球化也是如此
- 规则 2:如果某个类型已存在于 netstandard 中,则该类型需要在 netstandard 中。
- 密码学基础类
- 流
- 好的,几乎所有的网络标准
- 举个例子:netstandard3.0 当前提议的更改包括定义.NET Core 添加到现有网络标准类型的 (ReadOnly)Span 和 (ReadOnly)Memory-based 方法,这意味着 (ReadOnly)Span 和(只读)内存必须从 "on netstandard" 变为 "in netstandard"。
netstandard 中定义的事物需要兼容的实现来定义其中的所有事物(尽管“throw new PlatformNotSupportedException();
”是任何事物的合法实现)。所以 .NET Framework、.NET Core、Mono、Xamarin、Unity(以及我想不到的任何其他)都需要定义一个东西。有时 code 在这些运行时之间共享,但每个运行时都有自己的功能实现;并且修复其中一个中的错误需要修复所有 5+ 中的错误(或者,至少,发布对所有 5+ 的更新)。
另一方面,当功能可以纯粹根据 netstandard 中已有的东西交付时,这些东西非常适合托管在 NuGet 上,并且相同的 DLL 可以加载到所有 5+ 运行时并正常工作.当一个错误被修复时,它会在所有地方得到修复1,2。所有人都有很多好处。这些库使用 netstandard 版本的 Target Framework Moniker (TFM),然后它们有效地扩展了 netstandard。唯一的缺点是消费者需要显式地添加包引用来构建。 System.Security.Cryptography.Xml
和 System.Security.Cryptography.Pkcs
都在这个桶中。
1。 .NET Framework(或 Xamarin 等)中已有的类型仍然必须在该运行时中独立修复,因为 NuGet 包表示忽略其内容并使用这些平台上的现有实现。
2。对于 .NET Core,当需要一个程序集作为运行时的实现细节时,它会包含在 Microsoft.NETCore.App
中,而 NuGet 包表示忽略其内容并使用该平台上的现有实现,这意味着该错误得到已修复一次,但必须同时作为 .NET Core 更新和 NuGet 包发布。