Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Varje version av Windows 10 SDK lägger till nya spännande funktioner som du vill dra nytta av. Men inte alla dina kunder kommer att uppdatera sina enheter till den senaste versionen av Windows 10 på samma gång, och du vill se till att din app fungerar på bredast möjliga utbud av enheter. Här visar vi hur du utformar din app så att den körs på tidigare versioner av Windows 10, men drar också nytta av nya funktioner när din app körs på en enhet med den senaste uppdateringen installerad.
Det finns tre steg att vidta för att se till att din app stöder det bredaste utbudet av Windows 10 enheter.
- Konfigurera först ditt Visual Studio projekt för att rikta in dig på de senaste API:erna. Detta påverkar vad som händer när du kompilerar din app.
- För det andra utför du körningskontroller för att säkerställa att du bara anropar API:er som finns på den enhet som appen körs på.
- För det tredje testar du appen på lägsta version och målversionen av Windows 10.
Konfigurera ditt Visual Studio projekt
Det första steget för att stödja flera Windows 10 versioner är att ange Target och Minimum os/SDK-versioner som stöds i ditt Visual Studio projekt.
- Target: SDK-versionen som Visual Studio kompilerar din appkod och kör alla verktyg mot. Alla API:er och resurser i den här SDK-versionen är tillgängliga i din appkod vid kompileringstillfället.
- Minimum: SDK-versionen som stöder den tidigaste OPERATIVSYSTEM-versionen som appen kan köras på (och distribueras till av butiken) och den version som Visual Studio kompilerar din apppåläggskod mot.
Under körningen körs appen mot den operativsystemversion som den distribueras till, så appen utlöser undantag om du använder resurser eller anropar API:er som inte är tillgängliga i den versionen. Vi visar hur du använder runtime-kontroller för att anropa rätt API:er senare i den här artikeln.
Inställningarna Mål och Minimum anger ändarna för ett intervall med OS/SDK-versioner. Men om du testar din app på den lägsta versionen kan du vara säker på att den kommer att köras på alla versioner mellan Minimum och Target.
Tips/Råd
Visual Studio varnar dig inte om API-kompatibilitet. Det är ditt ansvar att testa och se till att din app fungerar som förväntat på alla OS-versioner mellan och inklusive Minimum och Target.
När du skapar ett nytt projekt i Visual Studio 2015, uppdatering 2 eller senare uppmanas du att ange de mål- och minimiversioner som appen stöder. Som standard är målversionen den högsta installerade SDK-versionen och lägsta version är den lägsta installerade SDK-versionen. Du kan endast välja Mål och Minimum från SDK-versioner som är installerade på datorn.
Vi rekommenderar vanligtvis att du lämnar standardinställningarna. Men om du har en förhandsversion av SDK installerad och du skriver produktionskod bör du ändra målversionen från förhandsversions-SDK till den senaste officiella SDK-versionen.
Om du vill ändra lägsta och målversion för ett projekt som redan har skapats i Visual Studio går du till Project -> Properties -> Fliken Program -> Targeting.
Som referens visar följande tabell byggnumren för varje SDK.
| Vänligt namn | Utgåva | OS/SDK-kompilering |
|---|---|---|
| RTM | 1507 | 10240 |
| Uppdatering i november | 1511 | 10586 |
| Årsdagsuppdatering | 1607 | 14393 |
| Creators Update | 1703 | 15063 |
| Uppdatering av Fall Creators | 1709 | 16299 |
| Uppdatering för april 2018 | 1803 | 17134 |
| Uppdatering oktober 2018 | 1809 | 17763 |
| Uppdatering maj 2019 | 1903 | 18362 |
Du kan ladda ned valfri version av SDK:n från Windows SDK och emulatorarkivet. Du kan ladda ned den senaste Windows Insider Preview SDK från utvecklaravsnittet på webbplatsen Windows Insider.
Mer information om Windows 10 uppdateringar finns i Windows 10 versionsinformation. Viktig information om Windows 10 supportlivscykel finns i faktabladet Windows livscykel.
Utföra API-kontroller
Nyckeln till versionsanpassade appar är kombinationen av API-kontrakt och klassen ApiInformation . Med den här klassen kan du identifiera om ett angivet API-kontrakt, typ eller medlem finns så att du på ett säkert sätt kan göra API-anrop på flera olika enheter och os-versioner.
API-kontrakt
Uppsättningen API:er i en enhetsfamilj är uppdelad i underavdelningar som kallas API-kontrakt. Du kan använda metoden ApiInformation.IsApiContractPresent för att testa förekomsten av ett API-kontrakt. Det här är användbart om du vill testa om det finns många API:er som alla finns i samma version av ett API-kontrakt.
bool isScannerDeviceContract_1_Present =
Windows.Foundation.Metadata.ApiInformation.IsApiContractPresent
("Windows.Devices.Scanners.ScannerDeviceContract", 1);
Vad är ett API-kontrakt? I princip representerar ett API-kontrakt en funktion – en uppsättning relaterade API:er som tillsammans levererar vissa specifika funktioner. Ett hypotetiskt API-kontrakt kan representera en uppsättning API:er som innehåller två klasser, fem gränssnitt, en struktur, två uppräkningar och så vidare.
Logiskt relaterade typer grupperas i ett API-kontrakt och från och med Windows 10 är varje Windows Runtime API medlem i något API-kontrakt. Med API Contracts söker du efter tillgängligheten för en specifik funktion eller ETT API på enheten, vilket effektivt kontrollerar en enhets funktioner i stället för att söka efter en specifik enhet eller ett visst operativsystem. En plattform som implementerar alla API:er i ett API-kontrakt krävs för att implementera varje API i api-kontraktet. Det innebär att du kan testa om operativsystemet som körs stöder ett visst API-kontrakt och, om det gör det, anropa någon av API:erna i api-kontraktet utan att kontrollera var och en individuellt.
Det största och vanligaste API-kontraktet är Windows. Foundation.UniversalApiContract. Den innehåller majoriteten av API:erna i Universal Windows Platform. Dokumentationen om SDK:er för enhetsfamiljetillägg och API-kontrakt beskriver de olika API-kontrakt som är tillgängliga. Du ser att de flesta av dem representerar en uppsättning funktionellt relaterade API:er.
Anmärkning
Om du har en förhandsversion Windows Software Development Kit (SDK) installerad som inte är dokumenterad ännu, Du kan också hitta information om API-kontraktsstöd i filenPlatform.xmli installationsmappen för SDK på (Program Files (x86))\Windows Kits\10\Platforms<platform><SDK-versionen>\Platform.xml".
Versionsanpassad kod och villkorsstyrd XAML
I alla versioner av Windows 10 kan du använda klassen ApiInformation i ett villkor i koden för att testa förekomsten av det API som du vill anropa. I din anpassningsbara kod kan du använda olika metoder i klassen, till exempel IsTypePresent, IsEventPresent, IsMethodPresent och IsPropertyPresent, för att testa för API:er med den kornighet du behöver.
Mer information och exempel finns i Versionsanpassad kod.
Om dina appars lägsta version är build 15063 (Creators Update) eller senare kan du använda villkorsstyrd XAML för att ange egenskaper och instansiera objekt i markering utan att behöva använda kod bakom. Villkorsstyrd XAML är ett sätt att använda metoden ApiInformation.IsApiContractPresent i markering.
Mer information och exempel finns i Villkorsstyrd XAML.
Fördröjd inladdning av API:er
Funktionen QueryOptionalDelayLoadedAPI gör det möjligt för Store-appar (som inte tillåts av principen att anropa LoadLibrary) för att identifiera om deras fördröjda inlästa funktion faktiskt hittades.
#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;
}
Testa din versionsanpassade app
När du använder versionsanpassad kod eller villkorsstyrd XAML för att skriva en anpassningsbar version måste du testa den på en enhet som kör den lägsta versionen och på en enhet som kör målversionen av Windows 10.
Du kan inte testa alla sökvägar för villkorsstyrd kod på en enda enhet. För att säkerställa att alla kodsökvägar testas måste du distribuera och testa appen på en fjärrenhet (eller virtuell dator) som kör den lägsta operativsystemversion som stöds. Mer information om fjärrfelsökning finns i Distribuera och felsöka UWP-appar.