API:er med starkt namn genererar PlatformNotSupportedException
Några API:er som inte stöds i .NET/.NET Core men som inte gjorde något när de används har ändrats för att nu kasta en PlatformNotSupportedException vid körning. Tidigare skulle användning av dessa API:er så småningom resultera i ett körningsfel längre fram. undantaget utlöses nu när typen instansieras eller först används.
Tidigare beteende
I tidigare versioner anropades AssemblyName.KeyPair eller StrongNameKeyPair(Byte[]) var en no-op. Att ringa StrongNameKeyPair(FileStream) läste strömmen men gjorde annars ingenting.
Nytt beteende
Från och med .NET 6 genererar var och en av de tre berörda API:erna en PlatformNotSupportedException vid körning.
Version introducerad
.NET 6
Typ av icke-bakåtkompatibel ändring
Den här ändringen kan påverka binär kompatibilitet.
Orsak till ändringen
Tidigare, ett program som anropade API:et kompilerades och kördes, men så snart instansen användes i någon kodsökväg, utlöstes ett körningsfel. För att göra det tydligare att det här scenariot inte stöds flyttades logiken för undantagskastning till instanskonstruktorn. Om inga instanser skapas genereras även undantaget i offentliga startpunkter som returnerar den här typen, AssemblyName.KeyPairdvs. .
Rekommenderad åtgärd
Stark namnsignering stöds inte i .NET/.NET Core och det finns ingen lösning.
Kommentar
.NET Core/5+ kontrollerar aldrig signaturer i sin körning. Men om du riktar in dig på plattformsoberoende bibliotek (till exempel ett grundläggande autentiseringspaket som riktar sig mot .NET Standard 2.0, så att det körs på .NET Framework också), är stark namngivning en bra idé för kompatibilitet mellan körningar. .NET Framework fortsätter att framtvinga stark namngivning om den anropande appen är starkt namngiven. Du kan skapa starka namn i alla versioner av .NET med hjälp av verktyget Sn.exe . Mer information finns i Stark namnsignering.