この記事では、Windows ランタイム (WinRT) API を呼び出すようにデスクトップ アプリ プロジェクトを構成する方法について説明します。これは、通知、ファイル ピッカー、共有などの最新のWindows機能を提供する API です。
注
一部の WinRT API は、デスクトップ アプリではサポートされていません。 詳細については、「 デスクトップ アプリでの WinRT API のサポート」を参照してください。
.NET プロジェクトを構成する
.NET 6 以降: ターゲット フレームワーク モニカー オプションを使用する
プロジェクト ファイルWindows OS バージョン固有のTarget Framework Moniker (TFM) を指定します。 これにより、ビルド時に適切な Windows SDK ターゲット パッケージへの参照が追加されます。
Visual Studioで、Project > [ProjectName] プロパティを選択します。
プロパティ ページで、左側のナビゲーションで選択するか、スクロールして[ アプリケーション > 全般] を見つけます。
以下の設定を選んでください。
- Target framework - これは最初に、プロジェクトの作成時に選択した.NETバージョンに設定されますが、ここで変更できます。
- ターゲット OS - この設定はWindowsのままにします。
- ターゲット OS のバージョン - 使用する API セット (通常は最新) のバージョンを選択します。
- サポートされている OS バージョン (省略可能) - 詳細については、次のセクションを参照してください。
ターゲット フレームワーク モニカーでは、これらの値は次のように変換されます。
-
ターゲット フレームワーク -
net10.0 -
ターゲット OS -
-windows -
ターゲット OS のバージョン -
10.0.22621.0
<TargetFramework>net10.0-windows10.0.22621.0</TargetFramework>
<!-- If set... -->
<SupportedOSPlatformVersion>10.0.19041.0</SupportedOSPlatformVersion>
プロジェクト ファイルを手動で編集して値を設定することもできます。
Visual Studioで、
ソリューション エクスプローラー Edit Project File 。TargetFramework 値をWindowsバージョン固有の TFM に置き換えます。
Target TFM Windows 11、 バージョン 24H2 net10.0-windows10.0.26100.0Windows 11、 バージョン 22H2 net10.0-windows10.0.22621.0Windows 11 (初期リリース) net10.0-windows10.0.22000.0Windows 10 バージョン 2004 net10.0-windows10.0.19041.0Windows 10 バージョン 1903 net10.0-windows10.0.18362.0Windows 10 バージョン 1809 net10.0-windows10.0.17763.0注
表示される値は、.NET 10 です。 .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>プロジェクト ファイルを保存して閉じます。
Tip
TFM で指定されたバージョンは、アプリで使用できる API を示します。 実行時にアプリがサポートする OS バージョンは制御されません。 これは、プロジェクトのコンパイルに使用する参照アセンブリを選択し、NuGet パッケージからアセットを選択するために使用されます。 このバージョンは、ランタイム OS バージョンからあいまいさを解消するために、"プラットフォーム バージョン" または "OS API バージョン" と考えてください。 詳細については、「 ターゲット フレームワーク: TFM の OS バージョン」を参照してください。
最小Windows バージョンのサポート
TFM ターゲットより古いWindows バージョンでアプリを実行できるようにするには、前のセクションに示すように、SupportedOSVersion (SupportedOSPlatformVersion) を設定します。 詳細については、「 ターゲット フレームワーク: 以前の OS バージョンをサポートする」を参照してください。
一連の OS バージョンを対象とする場合は、 ApiInformation チェックを使用して、すべてのバージョンで使用できない API の呼び出しを保護します。 詳しくは、「バージョン アダプティブ アプリ」をご覧ください。
SupportedOSVersion が設定されている場合、Visual Studioはランタイム チェックを必要とする API に警告を表示します。 たとえば、ターゲット バージョンが 19041 で、最小バージョンが 17763 の場合、 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>
注
TargetPlatformMinVersion を手動で追加することもできますが、Visual Studioでのコンパイル時の警告は提供されません。
.NET 6 以降ではサポートされていない WinRT API
.NET 6 以降では、Windows内のいくつかの WinRT API。UI 名前空間はサポートされていません。 Microsoft.UI名前空間 (Windows アプリ SDKによって提供されます) 内の同等の API を代わりに使用します。
| Unsupported | 代わりに使用する |
|---|---|
Windows.UI.Colors |
Microsoft.UI.Colors |
Windows.UI.ColorHelper |
Microsoft.UI.ColorHelper |
Windows.UI.Text (ほぼ全ての型) |
Microsoft.UI.Text |
Windows.UI.Xaml (すべての型) |
Microsoft.UI.Xaml |
.NET Core 3.x または .NET Framework: NuGet パッケージをインストールする
アプリが .NET Core 3.x または .NET Framework をターゲットとしている場合は、Microsoft.Windows.SDK.Contracts NuGet パッケージをインストールします。
Visual Studioでプロジェクトを右クリックし、 Manage NuGet パッケージを選択します。
Microsoft.Windows.SDK.Contractsを検索します。最小Windowsターゲットと一致するパッケージ バージョンを選択します。
パッケージ バージョン Windowsのターゲット 10.0.19041.xxxx Windows 10 バージョン 2004 10.0.18362.xxxx Windows 10 バージョン 1903 10.0.17763.xxxx Windows 10 バージョン 1809 10.0.17134.xxxx Windows 10 バージョン 1803 インストール をクリックします。
.NET 6 以降および以前のバージョンをマルチターゲットする
.NET 6 以降では TFM アプローチを使用し、以前のバージョンでは NuGet パッケージを使用するようにプロジェクト ファイルを構成します。
<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>
条件付きコンパイル
6 つ以上のバージョン.NET複数のターゲットを設定する場合は、条件付きコンパイルを使用して、1 つのプロジェクトでバージョン固有のコードを記述します。 詳細については、「 ターゲット フレームワーク: プリプロセッサ シンボル」を参照してください。
#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
C++ (Win32) プロジェクトを構成する
C++ デスクトップ アプリから WinRT API を使用するには、C++/WinRT を使用します。
- Microsoft.Windows.CppWinRT NuGet パッケージをインストールします。
- C++/WinRT では C++17 標準の機能が使用されるため、 プロジェクト プロパティ C/C++ > Language > C++ Language Standard が ISO C++17 Standard (/std:c++17) 以降に設定されていることを確認 Visual Studioします。
詳細については、
次のステップ
また、Windows アプリ SDK から WinRT API を呼び出すには、「既存のプロジェクトでWindows アプリ SDKを使用するを参照してください。
一部の WinRT API にはパッケージ ID が必要です。 詳細については、次を参照してください。
関連するコンテンツ
Windows developer