强名称 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

另请参阅