Прочитать на английском

Поделиться через


Приведение вызываемой оболочки времени выполнения к интерфейсу InterfaceIsIInspectable вызывает исключение PlatformNotSupportedException

Приведение вызываемой оболочки времени выполнения (RCW) к интерфейсу, помеченному как InterfaceIsIInspectable, теперь вызывает исключение PlatformNotSupportedException. Это изменение соответствует удалению поддержки WinRT из .NET.

Представленные версии

.NET 5

Описание изменения

В предыдущих версиях .NET приведение RCW к интерфейсу, помеченному как InterfaceIsIInspectable, работало должным образом. Но начиная с версии .NET 5, приведение RCW к интерфейсу, помеченному как InterfaceIsIInspectable, вызывает исключение PlatformNotSupportedException во время приведения.

Причина изменения

Поддержка InterfaceIsIInspectable была удалена. Поскольку базовая поддержка в среде выполнения больше не существует, выдача исключения PlatformNotSupportedException обеспечивает корректную обработку сбоя. Создание исключения также позволяет легче обнаружить, что эта функция больше не поддерживается.

  • Если вы можете определить интерфейс в файле метаданных среды выполнения Windows (WinMD), используйте вместо этого средство C#/WinRT.

  • В противном случае пометьте интерфейс как InterfaceIsIUnknown вместо InterfaceIsIInspectable и добавьте три фиктивные записи в начало интерфейса для методов InterfaceIsIInspectable. Фрагмент кода приведен ниже.

    C#
    [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