强名称 API 引发 PlatformNotSupportedException
一些在 .NET/.NET Core 中不受支持但在被访问时未执行任何操作的 API 已更改为现在在运行时引发 PlatformNotSupportedException。 以前,使用这些 API 最终会导致运行时异常;现在,在实例化或首次访问该类型时就会引发异常。
旧行为
在以前的版本中,调用 AssemblyName.KeyPair 或 StrongNameKeyPair(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 版本中的程序集进行强命名。 有关详细信息,请参阅强名称签名。