APIs mit starkem Namen lösen „PlatformNotSupportedException“ aus
Einige APIs, die in .NET/.NET Core nicht unterstützt werden, aber beim Zugriff nichts bewirkten, wurden geändert und lösen jetzt zur Laufzeit PlatformNotSupportedException aus. 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. Durch den Aufruf von StrongNameKeyPair(FileStream) wurde der Stream gelesen, aber sonst nichts unternommen.
Neues Verhalten
Ab .NET 6 löst jede der drei betroffenen APIs zur Laufzeit PlatformNotSupportedException aus.
Eingeführt in Version
.NET 6
Typ des Breaking Changes
Diese Änderung kann sich auf die binäre Kompatibilität auswirken.
Grund für die Ä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, also AssemblyName.KeyPair.
Empfohlene Maßnahme
Die Signatur mit starkem Namen wird in .NET/.NET Core nicht unterstützt, und es gibt keine Problemumgehung.
Hinweis
.NET Core ab Version 5 überprüft Signaturen in seiner Runtime nicht. Wenn Sie jedoch auf plattformübergreifende Bibliotheken abzielen (z. B. ein einfaches Authentifizierungspaket, das auf den .NET Standard 2.0 abzielt, sodass es auch in .NET Framework funktioniert), sind starke Namen eine gute Idee für Kompatibilität mit mehreren Runtimes. .NET Framework erzwingt weiterhin starke Namen, wenn die aufrufende App einen starken Namen hat. Sie können Assemblys mit starkem Namen in allen Versionen von .NET verwenden, indem Sie das Tool Sn.exe einsetzen. Weitere Informationen finden Sie unter Signieren von Assemblys mit starkem Namen.