Umwandlung des RCW in eine InterfaceIsIInspectable-Schnittstelle löst PlatformNotSupportedException aus

Wenn ein RCW (Runtime Callable Wrapper) in eine als InterfaceIsIInspectable gekennzeichnete Schnittstelle umgewandelt wird, wird jetzt PlatformNotSupportedException ausgelöst. Diese Änderung folgt der Entfernung der WinRT-Unterstützung aus .NET.

Eingeführt in Version

.NET 5

Beschreibung der Änderung

In früheren .NET-Versionen hat die Umwandlung eines RCW in eine als InterfaceIsIInspectable gekennzeichnete Schnittstelle wie erwartet funktioniert. Ab .NET 5 löst das Umwandeln eines RCW in eine als InterfaceIsIInspectable gekennzeichnete Schnittstelle zur Umwandlungszeit PlatformNotSupportedException aus.

Grund für die Änderung

Die Unterstützung für InterfaceIsIInspectable wurde entfernt. Da die zugrunde liegende Unterstützung in der Runtime nicht mehr vorhanden ist, erzeugt das Auslösen von PlatformNotSupportedException einen ordnungsgemäßen Fehlerpfad. Durch die ausgelöste Ausnahme ist zudem leichter erkennbar, dass das Feature nicht mehr unterstützt wird.

  • Wenn Sie die Schnittstelle in der WinMD-Datei (Windows-Runtimemetadaten) definieren können, verwenden Sie das C#/WinRT-Tool.

  • Kennzeichnen Sie die Schnittstelle andernfalls als InterfaceIsIUnknown anstelle von InterfaceIsIInspectable, und fügen Sie am Anfang der Schnittstelle drei Platzhaltereinträge für die InterfaceIsIInspectable-Methoden hinzu. Der folgende Codeausschnitt zeigt ein Beispiel.

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

Betroffene APIs