Partager via


Le forçage de type d’un RCW dans une interface InterfaceIsIInspectable lève PlatformNotSupportedException

Le forçage de type d’un wrapper RCW dans une interface marquée comme InterfaceIsIInspectable maintenant lève une PlatformNotSupportedException. Cette modification est consécutive à la suppression de la prise en charge de WinRT par .NET.

Version introduite

.NET 5

Description de la modification

Dans les versions précédentes de .NET, le forçage de type d’un RCW dans une interface marquée comme InterfaceIsIInspectable fonctionnait comme prévu. À partir de .NET 5, le forçage de type d’un RCW dans une interface marquée comme InterfaceIsIInspectable lève une PlatformNotSupportedException au moment du cast.

Raison de la modification

La prise en charge de InterfaceIsIInspectable a été supprimée. Étant donné que le support sous-jacent dans le runtime n’existe plus, la levée d’une PlatformNotSupportedException permet un chemin de défaillance gracieux. La levée d’une exception rend également plus détectable que cette fonctionnalité n’est plus prise en charge.

  • Si vous pouvez définir l’interface dans un fichier de métadonnées Windows Runtime (WinMD), utilisez l’outil C#/WinRT à la place.

  • Sinon, marquez l'interface InterfaceIsIUnknown au lieu de InterfaceIsIInspectable, puis ajoutez trois entrées factices au début de l’interface pour les méthodes InterfaceIsIInspectable. L’extrait de code suivant montre un exemple.

    [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 affectées