Freigeben über


APIs mit starkem Namen lösen „PlatformNotSupportedException“ aus

Einige APIs, die in .NET/.NET Core nicht unterstützt werden und zuvor bei Zugriff nichts getan haben, wurden so geändert, dass sie jetzt zur Laufzeit eine PlatformNotSupportedException werfen. Bisher führte die Verwendung dieser APIs irgendwann zu einer Laufzeitausnahme. Jetzt wird die Ausnahme ausgelöst, wenn der Typ instanziiert wird oder der erste Zugriff erfolgt.

Vorheriges Verhalten

In früheren Versionen war das Aufrufen AssemblyName.KeyPair oder StrongNameKeyPair(Byte[]) eine Nulloperation. Der Aufruf StrongNameKeyPair(FileStream) liest den Datenstrom, hat aber andernfalls nichts getan.

Neues Verhalten

Ab .NET 6 löst jede der drei betroffenen APIs zur Laufzeit PlatformNotSupportedException aus.

Eingeführte Version

.NET 6

Art der einschneidenden Änderung

Diese Änderung kann sich auf die Binäre Kompatibilität auswirken.

Grund für Änderung

Zuvor wurde eine die API aufrufende Anwendung zwar kompiliert und ausgeführt, aber sobald die Instanz in einem Codepfad verwendet wurde, löste sie eine Laufzeitausnahme aus. Um deutlicher zu machen, dass dieses Szenario nicht unterstützt wird, wurde die Logik zum Auslösen von Ausnahmen in den Instanzkonstruktor verschoben. Falls keine Instanzen erstellt werden, wird die Ausnahme auch in öffentlichen Einstiegspunkten ausgelöst, die diesen Typ zurückgeben, d. h. AssemblyName.KeyPair.

Die Signatur mit starkem Namen wird in .NET/.NET Core nicht unterstützt, und es gibt keine Problemumgehung.

Hinweis

.NET Core/5+ überprüft in seiner Laufzeit niemals Signaturen. Wenn Sie jedoch auf plattformübergreifende Bibliotheken abzielen (z. B. ein einfaches Authentifizierungspaket, das auf .NET Standard 2.0 ausgerichtet ist, sodass es auch auf .NET Framework ausgeführt wird), empfiehlt sich eine starke Benennung für die kompatibilitätsübergreifende Laufzeit. .NET Framework erzwingt weiterhin starke Benennungen, wenn die aufrufende App stark benannt ist. Sie können Assemblys in allen Versionen von .NET mit einem starken Namen versehen, indem Sie das Sn.exe Tool verwenden. Weitere Informationen finden Sie unter Signieren von Assemblys mit starkem Namen.

Betroffene APIs

Siehe auch