Excepción PlatformNotSupportedException al convertir un contenedor RCW en una interfaz de InterfaceIsIInspectable
Al convertir un contenedor RCW en una interfaz marcada como InterfaceIsIInspectable, ahora se genera la excepción PlatformNotSupportedException. Este cambio es una continuación de la eliminación de la compatibilidad con WinRT de .NET.
Versión introducida
.NET 5
Descripción del cambio
En versiones anteriores de .NET, convertir un contenedor RCW en una interfaz marcada como InterfaceIsIInspectable funcionaba según lo previsto. En .NET 5, al convertir un contenedor RCW en una interfaz marcada como InterfaceIsIInspectable, se genera una excepción PlatformNotSupportedException durante la conversión.
Motivo del cambio
La compatibilidad con InterfaceIsIInspectable se ha eliminado. Como la compatibilidad subyacente en el entorno de ejecución ya no existe, al generar una excepción PlatformNotSupportedException, se habilita una ruta de error gradual. Al generar una excepción, también se puede detectar con más facilidad que esta característica ya no se admite.
Acción recomendada
Si puede definir la interfaz en un archivo de metadatos del entorno de ejecución de Windows (WinMD), use la herramienta C#/WinRT.
De lo contrario, marque la interfaz como InterfaceIsIUnknown en lugar de InterfaceIsIInspectable y, después, agregue tres entradas ficticias al inicio de la interfaz para los métodos de InterfaceIsIInspectable. En el siguiente fragmento de código se muestra un ejemplo.
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] interface IMine { // Do not call these three methods. // They're exclusively to fill in the slots in the vtable. void GetIIdsSlot(); void GetRuntimeClassNameSlot(); void GetTrustLevelSlot(); // The original members of the IMine interface go here. ... }