Compartilhar via


A conversão do RCW para uma interface InterfaceIsIInspectable gera a PlatformNotSupportedException

A conversão de um RCW (Runtime Callable Wrapper) em uma interface marcada como InterfaceIsIInspectable agora gera um PlatformNotSupportedException. Essa alteração é uma continuação da remoção do suporte do WinRT no .NET.

Versão introduzida

.NET 5

Descrição da alteração

Nas versões anteriores do .NET, a conversão de um RCW em uma interface marcada como InterfaceIsIInspectable funcionava como esperado. Do .NET 5 em diante, a conversão de um RCW em uma interface marcada como InterfaceIsIInspectable gera uma PlatformNotSupportedException em tempo de conversão.

Motivo da alteração

O suporte para InterfaceIsIInspectable foi removido. Como o suporte subjacente no runtime não existe mais, gerar uma PlatformNotSupportedException habilita um caminho de falha normal. Gerar uma exceção também torna mais detectável que esse recurso não tenha mais suporte.

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

  • Caso contrário, marque a interface como InterfaceIsIUnknown em vez de InterfaceIsIInspectablee adicione três entradas fictícias ao início da interface para os InterfaceIsIInspectable métodos. O snippet 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