Il cast di RCW in un'interfaccia InterfaceIsIInspectable genera PlatformNotSupportedException

Eseguire il cast di un wrapper chiamabile in fase di esecuzione (RCW) in un'interfaccia contrassegnata come InterfaceIsIInspectable genera ora una PlatformNotSupportedException. Questa modifica è un completamento della rimozione del supporto di WinRT da .NET.

Versione introdotta

.NET 5

Descrizione delle modifiche

Nelle versioni precedenti di .NET il cast di un RCW in un'interfaccia contrassegnata come InterfaceIsIInspectable funzionava come previsto. A partire da .NET 5, il cast di un RCW in un'interfaccia contrassegnata come InterfaceIsIInspectable genera un PlatformNotSupportedException in fase di cast.

Motivo della modifica

Il supporto per InterfaceIsIInspectable è stato rimosso. Poiché il supporto sottostante nel runtime non esiste più, la creazione di un PlatformNotSupportedException abilita un percorso di errore normale. La generazione di un'eccezione rende inoltre più individuabile che questa funzionalità non è più supportata.

  • Se si può definire l'interfaccia in un file di metadati Windows Runtime (WinMD), usare invece lo strumento C#/WinRT.

  • In caso contrario, contrassegnare l'interfaccia come InterfaceIsIUnknown invece di InterfaceIsIInspectablee aggiungere tre voci fittizie all'inizio dell'interfaccia per i metodi InterfaceIsIInspectable. Il frammento di codice seguente mostra un esempio.

    [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 interessate