自己完結型アプリの Windows アプリ SDK 展開ガイド
Windows アプリ SDK プロジェクトは、既定ではフレームワークに依存します。 自己完結型デプロイに切り替えるには、次の手順に従います (framework 依存という用語および自己完結型については、Windows アプリ SDKデプロイの概要で説明します)。
- Visual Studio で、アプリ プロジェクト ノードを右クリックし、 プロジェクト ファイルの編集 をクリックして、編集用のアプリ プロジェクト ファイルを開きます。 C++ プロジェクトの場合は、最初 [プロジェクトの読み込み] をクリックします。
- アプリ プロジェクト ファイルのメイン
PropertyGroup
内に、次のスクリーンショットに示すように<WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>
を追加します。
- パッケージ 化されたプロジェクトの場合、アプリ プロジェクト ファイルで、閉じる
</Project>
の前のファイルの末尾に、次に示すTarget
を追加します。
<Target Name="_RemoveFrameworkReferences" BeforeTargets="_ConvertItems;_CalculateInputsForGenerateCurrentProjectAppxManifest">
<ItemGroup>
<FrameworkSdkReference Remove="@(FrameworkSdkReference)" Condition="$([System.String]::Copy('%(FrameworkSdkReference.SDKName)').StartsWith('Microsoft.WindowsAppRuntime.'))" />
</ItemGroup>
</Target>
Note
これは、Windows アプリ SDK 1.1 のバグの回避策であり、Windows アプリ SDK 1.2 では必要ありません。 パッケージ 化されたプロジェクトにのみ必要です。
- プロジェクト ファイルを保存して閉じます。
- プロジェクトの読み込みをクリックします。
- Windows アプリケーション パッケージ プロジェクト (Blank App、Packaged (デスクトップの WinUI 3) で取得する単一プロジェクトの MSIX ではなく) を使用している場合は、パッケージ 化プロジェクトのプロジェクト ファイルでも上記のすべての変更を行います。
Note
ライブラリ プロジェクトは変更しないでください。 自己完結型展開は、アプリ プロジェクトでのみ構成する必要があります (該当する場合は、 Windows アプリケーション パッケージ プロジェクト)。
サンプル アプリについては、自己完結型のデプロイ サンプルWindows アプリ SDK参照してください。
WindowsAppSDKSelfContained
プロパティをプロジェクト ファイル内のtrue
に設定すると、Windows アプリ SDK Framework パッケージの内容がビルド出力に抽出され、アプリケーションの一部として展開されます。
Note
.NET アプリ 自己完結型として公開する必要があります。また 完全に自己完結型にする必要があります。 発行プロファイル 自己完結型の .NET を構成する方法については このサンプルを参照してください。 dotnet publish
は、Windows アプリ SDK 1.1 ではまだサポートされていません。
Note
C++ アプリでは、 hybrid CRT を使用する必要があります 完全に自己完結型にする必要があります。 Directory.Build.propsからHybridCRT.propsをインポートすることはソリューション内のすべてのプロジェクトに対してこれを構成するための推奨される方法です (Directory.Build.props の例を参照)。 パッケージ アプリは、プロジェクト ファイルに <UseCrtSDKReferenceStaticWarning>false</UseCrtSDKReferenceStaticWarning>
も設定する必要があります。 ハイブリッド CRT の使用方法については、 自己完結型展開 サンプル アプリを参照してください。
アプリがパッケージ化されている場合 (詳細については、「展開の概要」を参照)、Windows アプリ SDKの依存関係が MSIX パッケージ内のコンテンツとして含まれます。 アプリを展開するには、他のパッケージ アプリと同様に MSIX パッケージを登録する必要があります。
アプリが外部の場所でパッケージ化されている場合、またはパッケージ化されていない場合は、ビルド出力の.exe
の横にWindows アプリ SDKの依存関係がコピーされます。 結果のファイルを xcopy で展開することも、カスタム インストーラーに含めることもできます。
追加の MSIX パッケージへの依存関係
Windows アプリ SDKの少数の API は、重要なオペレーティング システム (OS) 機能を表す追加の MSIX パッケージに依存しています。
- たとえば、(Windows アプリ SDK 1.1 時点)、プッシュ通知 API (PushNotificationManager) とアプリ通知 API (AppNotificationManager) は、Singleton パッケージに依存します (Windows アプリ SDKのデプロイ アーキテクチャ参照)。
つまり、自己完結型アプリでこれらの API を使用する場合は、次のオプションがあります。
- 機能を省略可能にし、可能な場合は 点灯することもできます。 API の IsSupported メソッド (PushNotificationManager.IsSupported および AppNotificationManager.IsSupported) を呼び出すと、実行中のシステム上の呼び出し元アプリで API を使用できるかどうかを実行時に動的に確認できます。
- これにより、自己完結型デプロイのシンプルさを損なうことなく、API の安全で条件付きでオプションの使用が可能になります。
- OS サービスがアプリのデプロイの外部にインストールされている場合にのみ、アプリは適切な機能を起動します。 しかし、実際には、シングルトン パッケージが存在しない場合でも API が動作場合があります。そのため、IsSupported を呼び出して確認することをお勧めします。
- アプリのインストールの一部として、必要な MSIX パッケージを展開します。
- これにより、すべてのシナリオで API に依存できます。 ただし、アプリの展開の一環として依存関係の MSIX パッケージの展開を要求すると、自己完結型展開のシンプルさが損なわれる可能性があります。
- API を使用しないでください。
- 追加のデプロイ要件なしで同様の機能を提供する代替 API を検討してください。
UndockedRegFreeWinRT 自動サポートをオプトアウト (またはオプトアウト) する
project プロパティ WindowsAppSdkUndockedRegFreeWinRTInitialize は、(安定したチャネルから) Windows アプリ SDKのバージョン 1.2 で導入されました。 そのプロパティが true に設定されている場合Windows アプリ SDKによる登録不要のWindows ランタイム (UndockedRegFreeWinRT) の実装が、アプリの起動時に自動的に有効になります。 このサポートは、パッケージ化されていない自己完結型アプリで必要です。
WindowsAppSdkUndockedRegFreeWinRTInitializeWindowsAppSDKSelfContained が true でWindowsPackageType の場合既定値は true です None および (Windows アプリ SDK のバージョン 1.2 以降) OutputType プロジェクト プロパティは Exe または WinExe (つまり、 プロジェクトによって実行可能ファイルが生成されます)。 最後の条件は、既定でクラス ライブラリ DLL やその他の非実行可能ファイルに UndockedRegFreeWinRT の自動サポートを追加しないようにすることです。 場合非実行可能ファイル (UndockedRegFreeWinRT を初期化しないホスト プロセス実行可能ファイルによって読み込まれたテスト DLL など) で自動的に UndockedRegFreeWinRT サポートが必要な場合は、<WindowsAppSdkUndockedRegFreeWinRTInitialize>true</WindowsAppSdkUndockedRegFreeWinRTInitialize>
を使用してプロジェクトで明示的に有効にすることができます。
関連トピック
Windows developer