Share 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 é um acompanhamento da remoção do suporte do WinRT do .NET.

Versão introduzida

.NET 5

Descrição das alterações

Em versões anteriores do .NET, a conversão de um RCW em uma interface marcada como InterfaceIsIInspectable funcionava conforme o 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 evidente que esse recurso não tem 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 InterfaceIsIInspectable e adicione três entradas fictícias ao início da interface para os métodos InterfaceIsIInspectable. 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