Versionsadaptiver Code

Sie können sich überlegen, wie Sie adaptiven Code ähnlich wie beim Erstellen einer adaptiven Benutzeroberfläche schreiben. Entwerfen Sie ihren Basiscode so, dass er auf der niedrigsten Betriebssystemversion ausgeführt wird, und fügen Sie dann Features hinzu, wenn Sie feststellen, dass Ihre App in einer höheren Version ausgeführt wird, in der ein neues Feature verfügbar ist.

Hintergrundinformationen zu ApiInformationAPI-Verträgen und zum Konfigurieren von Visual Studio finden Sie unter Versionsadaptive Apps.

Prerequisites

Laufzeit-API-Prüfungen

Verwenden Sie die Windows. Foundation.Metadata.ApiInformation-Klasse in einer Bedingung in Ihrem Code zum Testen des Vorhandenseins der API, die Sie aufrufen möchten. Diese Bedingung wird überall dort ausgewertet, wo Ihre App ausgeführt wird, ergibt jedoch nur auf Geräten true, auf denen die API vorhanden und aufrufbar ist.

Important

ApiInformationÜberprüfungen funktionieren nur für Windows-Runtime-Typen im Windows.*-Namespace. Sie erkennen WinUI-Typen (Microsoft.UI.Xaml.*) nicht, da diese Typen Teil des Windows App SDK Frameworkpakets, nicht des Betriebssystems sind und nicht als WinRT-Metadaten registriert sind, die ApiInformation abfragen können. #if Präprozessordirektiven helfen hier nicht– sie werden zur Kompilierungszeit basierend auf dem Zielframework ausgewertet, nicht zur Laufzeit basierend auf dem Betriebssystem oder der SDK-Version, auf der die App tatsächlich ausgeführt wird. Wenn Sie ein WinUI-Feature bedingt aktivieren möchten, überprüfen Sie die Windows App SDK-Version, für die Ihre App erstellt wurde (siehe Versionsadaptive Apps), oder umschließen Sie den Aufruf mit einem Try/Catch-Block und greifen Sie auf eine Ausweichlösung zurück, wenn er zur Laufzeit fehlschlägt.

Tip

Zahlreiche Laufzeit-API-Prüfungen können sich auf die Leistung Ihrer App auswirken. Führen Sie die Überprüfung einmal aus, und speichern Sie das Ergebnis zwischen, und verwenden Sie dann das zwischengespeicherte Ergebnis in der gesamten App.

Optionen für adaptiven Code

Es gibt zwei Möglichkeiten zum Erstellen von adaptivem Code:

  • App-Code – Verwenden Sie Laufzeit-API-Überprüfungen im CodeBehind. Dies ist der empfohlene Ansatz für die meisten Szenarien.
  • Zustandsauslöser – Verwenden Sie erweiterbare Zustandstrigger, die visuelle Zustände basierend auf dem Vorhandensein einer API aktivieren. Verwenden Sie Zustandsauslöser, wenn es zwischen Betriebssystemversionen eine einfache Änderung einer Eigenschaft oder eines Enum-Werts gibt, die mit einem visuellen Zustand verknüpft ist.

Beispiel: Prüfen, ob ein Enum-Wert vorliegt

In diesem Beispiel wird gezeigt, wie Sie überprüfen, ob ein bestimmter Enumerationswert vorhanden ist, bevor Sie ihn verwenden. Wenn der Wert nicht vorhanden ist, greift der Code auf eine Alternative zurück. EnergySaverStatusund PowerManager sind echte Windows-Runtime Typen im Windows.System.Power Namespace, sodass ApiInformation sie richtig abfragen können.

if (ApiInformation.IsEnumNamedValuePresent(
    "Windows.System.Power.EnergySaverStatus", "On"))
{
    if (PowerManager.EnergySaverStatus == EnergySaverStatus.On)
    {
        // Reduce background work to save battery.
        ReduceBackgroundActivity();
    }
}
else
{
    // Energy Saver status isn't available on this OS version; skip the check.
}

void ReduceBackgroundActivity()
{
    // Pause non-essential timers, syncs, and animations here.
}

Important

Wenn Sie das Ergebnis einer API-Überprüfung zwischenspeichern, verwenden Sie diesen zwischengespeicherten Wert in der gesamten App konsistent. Wiederholen Sie die Überprüfung nicht an mehreren Stellen – überprüfen Sie einmal, speichern Sie das Ergebnis, und verweisen Sie überall darauf.

Beispiel: Auf eine Methode prüfen

Verwenden Sie IsMethodPresent diese Methode, um zu überprüfen, ob eine bestimmte Methode verfügbar ist, bevor Sie sie aufrufen:

DisplayRequest displayRequest = new DisplayRequest();

if (ApiInformation.IsMethodPresent(
    "Windows.System.Display.DisplayRequest", "RequestActive"))
{
    displayRequest.RequestActive();
}

Beispiel: Überprüfen auf eine Eigenschaft

Verwenden Sie IsPropertyPresent, um zu überprüfen, ob eine bestimmte Eigenschaft verfügbar ist, bevor Sie sie lesen:

if (ApiInformation.IsPropertyPresent(
    "Windows.System.Power.PowerManager", "RemainingChargePercent"))
{
    int chargePercent = PowerManager.RemainingChargePercent;
}

Bewährte Vorgehensweisen

Praxis Leitlinien
Verwenden statischer Zeichenfolgen Verwenden Sie beim Überprüfen der API-Namen mit ApiInformation fest codierte Zeichenfolgen statt .NET-Reflexion, um Probleme beim Laden von Typen zur Laufzeit zu vermeiden.
Cacheergebnisse Führen Sie jede API-Überprüfung einmal beim Start durch, und speichern Sie das Ergebnis für die Wiederverwendung.
Mindestversion niedrig halten Legen Sie die Mindestversion Ihres Projekts so gering wie praktisch fest, um die größte Zielgruppe zu erreichen, und verwenden Sie adaptiven Code, um Features in neueren Betriebssystemversionen aufzuhellen.
Testen der Mindestversion Testen Sie immer die mindestens unterstützte Betriebssystemversion, um sicherzustellen, dass Fallbackpfade ordnungsgemäß funktionieren.