Freigeben über


Versionsadaptive Apps: Verwenden neuer APIs bei gleichzeitiger Aufrechterhaltung der Kompatibilität mit früheren Versionen

Jede Version des Windows 10 SDK bietet spannende neue Funktionen, die Sie nutzen möchten. Nicht alle Ihre Kunden aktualisieren ihre Geräte jedoch auf die neueste Version von Windows 10 gleichzeitig, und Sie möchten sicherstellen, dass Ihre App auf dem größtmöglichen Gerätebereich funktioniert. Hier zeigen wir Ihnen, wie Sie Ihre App so entwerfen, dass sie auf früheren Versionen von Windows 10 ausgeführt wird, aber auch neue Features nutzt, wenn Ihre App auf einem Gerät ausgeführt wird, auf dem das neueste Update installiert ist.

Es gibt drei Schritte, um sicherzustellen, dass Ihre App die umfassendste Palette von Windows 10-Geräten unterstützt.

  • Konfigurieren Sie zunächst Ihr Visual Studio Projekt so, dass es auf die neuesten APIs ausgerichtet ist. Dies wirkt sich darauf aus, was beim Kompilieren der App geschieht.
  • Führen Sie zweitens Laufzeitüberprüfungen durch, um sicherzustellen, dass Sie nur APIs aufrufen, die auf dem Gerät vorhanden sind, auf dem Ihre App ausgeführt wird.
  • Testen Sie ihre App drittens auf der Mindestversion und der Zielversion von Windows 10.

Konfigurieren Ihres Visual Studio Projekts

Der erste Schritt bei der Unterstützung mehrerer Windows 10 Versionen besteht darin, die Target und Minimum unterstützten Betriebssystem-/SDK-Versionen in Ihrem Visual Studio Projekt anzugeben.

  • Target: Die SDK-Version, mit der Visual Studio Ihren App-Code kompiliert und alle Tools ausführt. Alle APIs und Ressourcen in dieser SDK-Version sind zur Kompilierungszeit im App-Code verfügbar.
  • Minimum: Die SDK-Version, die die früheste Betriebssystemversion unterstützt, auf der Ihre App ausgeführt werden kann (und vom Store bereitgestellt wird), und die Version, gegen die Visual Studio Ihren App-Markupcode kompiliert.

Während der Laufzeit wird Ihre App für die Betriebssystemversion ausgeführt, für die sie bereitgestellt wird, sodass Ihre App Ausnahmen auslöst, wenn Sie Ressourcen verwenden oder APIs aufrufen, die in dieser Version nicht verfügbar sind. Wir zeigen Ihnen, wie Sie Laufzeitüberprüfungen verwenden, um die richtigen APIs weiter unten in diesem Artikel aufzurufen.

Die Einstellungen "Ziel" und "Minimum" geben die Enden eines Bereichs von Betriebssystem-/SDK-Versionen an. Wenn Sie Ihre App jedoch mit der Mindestversion testen, können Sie sicher sein, dass sie für alle Versionen zwischen Dem Minimum und Ziel ausgeführt wird.

Tipp

Visual Studio warnt Sie nicht über die API-Kompatibilität. Es liegt in Ihrer Verantwortung, ihre App auf allen Betriebssystemversionen zwischen und einschließlich Minimum und Ziel zu testen und sicherzustellen, dass ihre App erwartungsgemäß ausgeführt wird.

Wenn Sie ein neues Projekt in Visual Studio 2015, Update 2 oder höher erstellen, werden Sie aufgefordert, die von Ihrer App unterstützten Ziel- und Mindestversionen festzulegen. Standardmäßig ist die Zielversion die höchste installierte SDK-Version, und die Mindestversion ist die niedrigste installierte SDK-Version. Sie können "Ziel" und "Minimum" nur in SDK-Versionen auswählen, die auf Ihrem Computer installiert sind.

Das Ziel-SDK in Visual Studio festlegen

In der Regel wird empfohlen, die Standardwerte zu behalten. Wenn Sie jedoch eine Vorschauversion des SDK installiert haben und Produktionscode schreiben, sollten Sie die Zielversion vom Preview SDK in die neueste offizielle SDK-Version ändern.

Um die Mindest- und Zielversion für ein Projekt zu ändern, das bereits in Visual Studio erstellt wurde, wechseln Sie zu Project -> Properties -> Application tab -> Targeting.

Change the target SDK in Visual Studio

Die folgende Tabelle enthält die Buildnummern für jedes SDK.

Freundlicher Name Version Betriebssystem-/SDK-Build
RTM 1507 10.240
November-Update 1511 10586
Jubiläums-Update 1607 14393
Creators Update 1703 15063
Fall Creators Update 1709 16299
April 2018 Update 1803 17134
Update vom Oktober 2018 1809 17763
Update vom Mai 2019 1903 18362

Sie können jede veröffentlichte Version des SDK aus dem Windows SDK- und Emulatorarchiv herunterladen. Sie können das neueste Windows Insider Preview SDK aus dem Entwicklerabschnitt der Website Windows Insider herunterladen.

Weitere Informationen zu Windows 10 Updates finden Sie unter Windows 10 Releaseinformationen. Wichtige Informationen zum Windows 10 Supportlebenszyklus finden Sie im Windows-Informationsblatt zum Lebenszyklus.

Durchführen von API-Prüfungen

Der Schlüssel für versionsadaptive Apps ist die Kombination aus API-Verträgen und der ApiInformation-Klasse . Mit dieser Klasse können Sie erkennen, ob ein angegebener API-Vertrag, -Typ oder -Mitglied vorhanden ist, damit Sie API-Aufrufe auf einer Vielzahl von Geräten und Betriebssystemversionen sicher durchführen können.

API-Verträge

Der Satz von APIs innerhalb einer Gerätefamilie wird in Unterteilungen unterteilt, die als API-Verträge bezeichnet werden. Sie können die ApiInformation.IsApiContractPresent-Methode verwenden, um das Vorhandensein eines API-Vertrags zu testen. Dies ist nützlich, wenn Sie testen möchten, ob viele APIs vorhanden sind, die alle in derselben Version eines API-Vertrags vorhanden sind.

    bool isScannerDeviceContract_1_Present =
        Windows.Foundation.Metadata.ApiInformation.IsApiContractPresent
            ("Windows.Devices.Scanners.ScannerDeviceContract", 1);

Was ist ein API-Vertrag? Im Wesentlichen stellt ein API-Vertrag ein Feature dar – eine Reihe verwandter APIs, die zusammen bestimmte Funktionen bereitstellen. Ein hypothetischer API-Vertrag könnte eine Reihe von APIs darstellen, die zwei Klassen, fünf Schnittstellen, eine Struktur, zwei Enumerationen usw. enthalten.

Logisch verwandte Typen werden in einem API-Vertrag gruppiert und beginnend mit Windows 10 ist jede Windows Runtime-API Mitglied eines API-Vertrags. Mit API-Verträgen überprüfen Sie, ob ein bestimmtes Feature oder eine bestimmte API auf dem Gerät verfügbar ist, und die Funktionen eines Geräts effektiv überprüfen, anstatt nach einem bestimmten Gerät oder Betriebssystem zu suchen. Eine Plattform, die eine API in einem API-Vertrag implementiert, muss jede API in diesem Vertrag implementieren. Dies bedeutet, dass Sie testen können, ob das ausgeführte Betriebssystem einen bestimmten API-Vertrag unterstützt und gegebenenfalls eine der APIs in diesem API-Vertrag aufruft, ohne die einzelnen APIs zu überprüfen.

Der größte und am häufigsten verwendete API-Vertrag ist der Windows. Foundation.UniversalApiContract. Sie enthält die meisten APIs im Universal Windows Platform. Die Dokumentation zu Erweiterungs-SDKs und API-Verträgen der Gerätefamilie beschreibt die Vielzahl der verfügbaren API-Verträge. Sie werden sehen, dass die meisten von ihnen eine Reihe funktionaler APIs darstellen.

Hinweis

Wenn Sie eine Vorschau Windows Software Development Kit (SDK) installiert haben, die noch nicht dokumentiert ist, Sie finden auch Informationen zur API-Vertragsunterstützung in der Datei "Platform.xml" im SDK-Installationsordner unter "(Programme (x86))\Windows Kits\10\Platforms<platform><SDK version>\Platform.xml'.

Versionsadaptiver Code und bedingter XAML-Code

In allen Versionen von Windows 10 können Sie die ApiInformation-Klasse in einer Bedingung in Ihrem Code verwenden, um das Vorhandensein der API zu testen, die Sie aufrufen möchten. In Ihrem adaptiven Code können Sie verschiedene Methoden der Klasse verwenden, z. B. IsTypePresent, IsEventPresent, IsMethodPresent und IsPropertyPresent, um APIs auf die gewünschte Granularität zu testen.

Weitere Informationen und Beispiele finden Sie unter versionsadaptiver Code.

Wenn die Mindestversion Ihrer Apps Build 15063 (Creators Update) oder höher ist, können Sie bedingtes XAML verwenden, um Eigenschaften festzulegen und Objekte im Markup zu instanziieren, ohne Code-Behind verwenden zu müssen. Bedingter XAML-Code bietet eine Möglichkeit, die ApiInformation.IsApiContractPresent-Methode im Markup zu verwenden.

Weitere Informationen und Beispiele finden Sie unter Bedingtem XAML.

API mit verzögerter Ladung

Die Funktion QueryOptionalDelayLoadedAPI ermöglicht es Store-Apps (die gemäß Richtlinie LoadLibrary nicht aufrufen dürfen), zu erkennen, ob ihre verzögert geladene Funktion tatsächlich gefunden wurde.

#include <windows.h>
#include <commdlg.h>
#include <libloaderapi2.h>
#include <stdio.h>

EXTERN_C IMAGE_DOS_HEADER __ImageBase;
#define HMODULE_THISCOMPONENT reinterpret_cast<HMODULE>(&__ImageBase)

int __cdecl main(int argc, char** argv)
{
    if (QueryOptionalDelayLoadedAPI(HMODULE_THISCOMPONENT,
          "comdlg32.dll", "GetOpenFileNameW", 0))
    {
        printf("GetOpenFileNameW can be called!\n");
    }
    return 0;
}

Testen Sie Ihre versionsadaptive App.

Wenn Sie versionsadaptiven Code oder bedingten XAML verwenden, um eine versionsadaptive App zu schreiben, müssen Sie sie auf einem Gerät testen, auf dem die Mindestversion ausgeführt wird, und auf einem Gerät, auf dem die Zielversion von Windows 10 ausgeführt wird.

Sie können nicht alle bedingten Codepfade auf einem einzelnen Gerät testen. Um sicherzustellen, dass alle Codepfade getestet werden, müssen Sie Ihre App auf einem Remotegerät (oder virtuellen Computer) bereitstellen und testen, auf dem die mindestens unterstützte Betriebssystemversion ausgeführt wird. Weitere Informationen zum Remotedebugging finden Sie unter Bereitstellen und Debuggen von UWP-Apps.