强名称 API 引发 PlatformNotSupportedException

一些在 .NET/.NET Core 中不受支持但在被访问时未执行任何操作的 API 已更改为现在在运行时引发 PlatformNotSupportedException。 以前,使用这些 API 最终会导致运行时异常;现在,在实例化或首次访问该类型时就会引发异常。

以前的行为

在以前的版本中,调用 AssemblyName.KeyPairStrongNameKeyPair(Byte[]) 是无操作的。 调用 StrongNameKeyPair(FileStream) 读取流,但除此之外不执行任何操作。

新行为

从 .NET 6 开始,三个受影响 API 中的每一个都会在运行时引发 PlatformNotSupportedException

已引入的版本

.NET 6

破坏性变更的类型

此更改可能会影响 二进制兼容性

更改原因

以前,调用 API 的应用程序已编译并运行,但一旦实例在任何代码路径中使用,就会引发运行时异常。 为了更加明确地表示此方案不受支持,抛出异常的逻辑已被移动至实例构造函数中。 如果未创建任何实例,也会在返回此类型(即AssemblyName.KeyPair)的公共入口点中引发异常。

.NET/.NET Core 不支持强名称签名,并且没有解决方法。

注释

.NET Core/5+ 从不检查其运行时中的签名。 但是,如果你面向跨平台库(例如,面向 .NET Standard 2.0 的基本身份验证包,因此它也在 .NET Framework 上运行),则强命名是跨运行时兼容性的好主意。 如果调用应用具有强名称,.NET Framework 将继续强制实施强命名。 可以使用 Sn.exe 工具在所有版本的 .NET 中为程序集设定强名称。 有关详细信息,请参阅强名称签名

受影响的 API

另请参阅