Anropa Windows Runtime API:er i skrivbordsappar

Den här artikeln beskriver hur du konfigurerar dina skrivbordsappprojekt för att anropa API:er för Windows Runtime (WinRT) – DE API:er som driver moderna Windows funktioner som meddelanden, filväljare, delning med mera.

Anmärkning

Vissa WinRT-API:er stöds inte i skrivbordsappar. Mer information finns i Stöd för WinRT-API:er i skrivbordsappar.

Konfigurera ett .NET projekt

.NET 6 och senare: Använd monikeralternativet Target Framework

Ange en specifik Windows OS-version Target Framework Moniker (TFM) i projektfilen. Detta lägger till en referens till lämpligt Windows SDK-målpaket vid bygget.

  1. I Visual Studio väljer du egenskaper för Project > [ProjectName].

  2. På egenskapssidan hittar du Program > allmänt genom att välja det i det vänstra navigeringsfönstret eller rulla till det.

  3. Välj inställningar för:

    1. Target framework – Detta är ursprungligen inställt på den .NET version som du valde när projektet skapades, men du kan ändra det här.
    2. Target OS – Låt den här inställningen vara Windows.
    3. Måloperativsystemets version – Välj den version för DEN API-uppsättning som du vill använda, vanligtvis den senaste.
    4. Os-version som stöds (valfritt) – Mer information finns i nästa avsnitt.

Target-ramverksinställningar i Visual Studio.

I Target Framework Moniker översätts dessa värden så här:

  • Målramverk - net10.0
  • Måloperativsystem - -windows
  • Mål-OS-version - 10.0.22621.0
<TargetFramework>net10.0-windows10.0.22621.0</TargetFramework>
<!-- If set... -->
<SupportedOSPlatformVersion>10.0.19041.0</SupportedOSPlatformVersion>

Du kan också ange värdena genom att redigera projektfilen manuellt.

  1. I Visual Studio högerklickar du på din project i Prieskumník riešení och väljer Redigera Project Fil.

  2. Ersätt värdet TargetFramework med en Windows versionsspecifik TFM.

    Target TFM
    Windows 11 version 24H2 net10.0-windows10.0.26100.0
    Windows 11 version 22H2 net10.0-windows10.0.22621.0
    Windows 11 (första versionen) net10.0-windows10.0.22000.0
    Windows 10, version 2004 net10.0-windows10.0.19041.0
    Windows 10, version 1903 net10.0-windows10.0.18362.0
    Windows 10, version 1809 net10.0-windows10.0.17763.0

    Anmärkning

    Värdena som visas är för .NET 10. Uppdatera efter behov för andra versioner av .NET: net8.0, net9.0.

    Example:

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>WinExe</OutputType>
        <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
      </PropertyGroup>
    </Project>
    
  3. Spara och stäng projektfilen.

Tips/Råd

Den version som anges av TFM anger vilka API:er som är tillgängliga för din app. Den styr inte den operativsystemversion som din app stöder vid körning. Den används för att välja de referenssammansättningar som ditt projekt kompilerar mot och för att välja tillgångar från NuGet-paket. Tänk på den här versionen som "plattformsversion" eller "OS API-version" för att skilja den från körningsoperativsystemets version. Mer information finns i Målramverk: OS-version i TFM:er.

Stöd för en lägsta Windows version

Om du vill tillåta att appen körs på en Windows version som är äldre än TFM-målet anger du SupportedOSVersion (SupportedOSPlatformVersion), som du ser i föregående avsnitt. Mer information finns i Målramverk: Stöd för äldre os-versioner.

När du riktar in dig på ett antal OS-versioner, skydda anrop till API:er som inte är tillgängliga för alla versioner med hjälp av ApiInformation-kontroller. Mer information finns i Version av anpassningsbara appar.

När SupportedOSVersion har angetts ger Visual Studio en varning för API:er som behöver en körningskontroll. Om målversionen till exempel är 19041 och den lägsta versionen är 17763 visas en varning som den här när du anropar AppInfo.Current.

CA1416	Using platform dependent API on a component makes the code no longer work across all platforms.

This call site is reachable on: 'Windows' 10.0.17763.0 and later. 'AppInfo.Current' is only supported on: 'Windows' 10.0.19041.0 and later.
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
    <SupportedOSPlatformVersion>10.0.17763.0</SupportedOSPlatformVersion>
    <TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
  </PropertyGroup>
</Project>

Anmärkning

Du kan också lägga till TargetPlatformMinVersion manuellt, men det ger inte kompileringstidsvarningar i Visual Studio.

WinRT-API:er stöds inte i .NET 6 och senare

I .NET 6 och senare stöds flera WinRT-API:er i Windows.UI-namnutrymmet inte. Använd motsvarande API:er i Microsoft. UI namnområde (tillhandahålls av Windows App SDK) i stället:

Unsupported Använd i stället
Windows.UI.Colors Microsoft.UI.Colors
Windows.UI.ColorHelper Microsoft.UI.ColorHelper
Windows.UI.Text (de flesta typer) Microsoft.UI.Text
Windows.UI.Xaml (alla typer) Microsoft.UI.Xaml

.NET Core 3.x eller .NET Framework: Installera NuGet-paketet

Om din app är avsedd för .NET Core 3.x eller .NET Framework installerar du nuget-paketet Microsoft.Windows.SDK.Contracts:

  1. I Visual Studio högerklickar du på projektet och väljer Hantera NuGet-paket.

  2. Sök efter Microsoft.Windows.SDK.Contracts.

  3. Välj den paketversion som matchar ditt lägsta Windows mål:

    Paketversion Windows-mål
    10.0.19041.xxxx Windows 10, version 2004
    10.0.18362.xxxx Windows 10, version 1903
    10.0.17763.xxxx Windows 10, version 1809
    10.0.17134.xxxx Windows 10, version 1803
  4. Klicka på Installera.

Målrikta flera plattformar: .NET 6+ och tidigare .NET-versioner

Konfigurera projektfilen så att den använder TFM-metoden för .NET 6+ och NuGet-paketet för tidigare versioner:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFrameworks>netcoreapp3.1;net8.0-windows10.0.19041.0</TargetFrameworks>
    <UseWPF>true</UseWPF>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Condition="'$(TargetFramework)' == 'netcoreapp3.1'"
                     Include="Microsoft.Windows.SDK.Contracts"
                     Version="10.0.19041.0"/>
  </ItemGroup>
</Project>

Villkorsstyrd kompilering

När du använder flera mål i .NET 6+ och tidigare versioner använder du villkorsstyrd kompilering för att skriva versionsspecifik kod i ett enda projekt. Mer information finns i Målramverk: Preprocessorsymboler.

#if NET6_0_OR_GREATER
    // Code that uses .NET 6+ APIs or TFM-available WinRT APIs
#else
    // Fallback code for .NET Core 3.x / .NET Framework
#endif

Konfigurera ett C++-projekt (Win32)

Använd C++/WinRT för att använda WinRT-API:er från C++-skrivbordsappar.

  • Installera Microsoft.Windows. CppWinRT NuGet-paket.
  • Eftersom C++/WinRT använder funktioner från C++17-standarden, se till att projektegenskapen C/C++ > Language > C++ Language Standard är inställd på ISO C++17 Standard (/std:c++17) eller senare i Visual Studio.

Mer information finns i Visual Studio support för C++/WinRT.

Nästa steg

Nu kan du anropa API:er för Windows Runtime (WinRT) från Windows SDK.

Om du också vill anropa WinRT-API:er från Windows App SDK läser du Använd Windows App SDK i ett befintligt projekt.

Vissa WinRT-API:er kräver paketidentitet. Mer information finns i: