厳密な名前の API によって PlatformNotSupportedException がスローされる

.NET/.NET Core でサポートされていない少数の API で、以前はアクセス時に何も発生しませんでしたが、実行時に PlatformNotSupportedException をスローするように変更されました。 以前は、これらの API を使用すると、かなり後で最終的に実行時に例外が発生していました。現在は、型がインスタンス化されるか最初にアクセスされたときに例外がスローされるようになりました。

以前の動作

以前のバージョンでは、AssemblyName.KeyPair または StrongNameKeyPair(Byte[]) は no-op でした。 StrongNameKeyPair(FileStream) を呼び出すと、ストリームを読み取りますが、それ以外は何も行われません。

新しい動作

.NET 6 以降、該当する 3 つの 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

こちらもご覧ください