Converter RCW para uma InterfaceIsIInspectable interface gera PlatformNotSupportedException

Converter um encapsulamento chamável em tempo de execução (RCW) para uma interface marcada como InterfaceIsIInspectable agora lança uma exceção PlatformNotSupportedException. Esta alteração é uma continuação da retirada do suporte WinRT do .NET.

Versão introduzida

.NET 5

Alterar descrição

Em versões anteriores do .NET, transmitir um RCW para uma interface marcada como InterfaceIsIInspectable funcionou conforme o esperado. A partir do .NET 5, a conversão de um RCW para uma interface marcada como InterfaceIsIInspectable lança um PlatformNotSupportedException em tempo de transmissão.

Motivo da mudança

O suporte para InterfaceIsIInspectable foi removido. Como o suporte subjacente no tempo de execução não existe mais, lançar um PlatformNotSupportedException permite um caminho de falha gracioso. Lançar uma exceção também torna mais detetável que esse recurso não é mais suportado.

  • Se você puder definir a interface em um arquivo de metadados do tempo de execução do Windows (WinMD), use a ferramenta C#/WinRT.

  • Caso contrário, marque a interface como InterfaceIsIUnknown em vez de InterfaceIsIInspectable, e adicione três entradas fictícias ao início da interface para os InterfaceIsIInspectable métodos. O trecho de código a seguir mostra um exemplo.

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

APIs afetadas