Dela via


Valv Handle-typer måste ha en offentlig konstruktor

Tidigare har överföring SafeHandleav -härledda typer till P/Invokes- och COM-metoder implicit krävt en parameterlös konstruktor för all synlighet när en SafeHandle-härledd typ skickas som en eller out parameter ref eller en returtyp. Källgenererad interop i .NET 7 tillät det här beteendet att möjliggöra enklare migrering från DllImportAttribute-baserade P/Invokes. Samtidigt uppdaterade vi Valv Handle-dokumentationen för att be implementerarna att tillhandahålla en public parameterlös konstruktor i sin härledda typ. Den här icke-bakåtkompatibla ändringen gör rekommendationen till ett krav för källgenererad marshalling.

Tidigare beteende

En SafeHandle-härledd typ krävdes för att ha en parameterlös konstruktor för all synlighet när den användes:

Nytt beteende

En SafeHandle-härledd typ krävs för att ha en public parameterlös konstruktor när den används:

Om typen inte har en public parameterlös konstruktor genererar interop-källgeneratorn ett kompileringsfel.

Version introducerad

Förhandsversion 5 av .NET 8

Typ av icke-bakåtkompatibel ändring

Den här ändringen kan påverka källkompatibiliteten.

Orsak till ändringen

Interop-källgeneratorerna ändras för att push-överföra mer kod från själva källgeneratorerna och till kärnbiblioteken för .NET. Som en del av den här ändringen börjar interop-teamet tillämpa de rekommenderade riktlinjerna för mer underhållsbar och begriplig interop-kod.

Ändra den befintliga icke-parameterlösapublic konstruktorn för - SafeHandlederived-typen till public.

Berörda API:er