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 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.

  • 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.
        ...
    }
    

API afectadas