Compartir a través de


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 una RCW a una interfaz marcada como InterfaceIsIInspectable funcionaba como se esperaba. 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 fue eliminada. 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. Lanzar una excepción también ayuda a detectar más fácilmente que esta característica ya no se admite.

  • Si puedes definir la interfaz en un archivo de metadatos de Windows Runtime (WinMD), usa la herramienta C#/WinRT en su lugar.

  • De lo contrario, marque la interfaz como InterfaceIsIUnknown en lugar de InterfaceIsIInspectabley agregue tres entradas ficticias al inicio de la interfaz para los InterfaceIsIInspectable métodos. En el fragmento de código siguiente 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.
        ...
    }
    

Las APIs afectadas