自己完結型アプリの Windows App SDK 展開ガイド

Windows App SDK プロジェクトは、既定ではフレームワークに依存します。 自己完結型の展開に切り替えるには、次の手順に従います (フレームワークに依存する用語と自己完結型の用語については、Windows App SDK の展開の概要説明されています)。

  • Visual Studio で、アプリ プロジェクト ノードを右クリックし、[プロジェクト ファイルの編集] をクリックして、編集用のアプリ プロジェクト ファイルを開きます。 C++ プロジェクトの場合は、最初に [プロジェクトのアンロード] をクリックします
  • アプリ プロジェクト ファイルのメイン PropertyGroup内に、次のスクリーンショットに示すように追加 <WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained> します。

Screenshot showing the WindowsAppSDKSelfContained property set in a project file.

  • パッケージ 化されたプロジェクトの場合は、アプリ プロジェクト ファイルで、閉じる </Project>前のファイルの末尾に、次のように Target 追加します。
  <Target Name="_RemoveFrameworkReferences" BeforeTargets="_ConvertItems;_CalculateInputsForGenerateCurrentProjectAppxManifest">
    <ItemGroup>
      <FrameworkSdkReference Remove="@(FrameworkSdkReference)" Condition="$([System.String]::Copy('%(FrameworkSdkReference.SDKName)').StartsWith('Microsoft.WindowsAppRuntime.'))" />
    </ItemGroup>
  </Target>

注意

これは Windows App SDK 1.1 のバグの回避策であり、Windows App SDK 1.2 では必要ありません。 パッケージ 化されたプロジェクトにのみ必要です。

  • プロジェクト ファイルを保存して閉じます。
  • [プロジェクトの再読み込み] をクリックします
  • Windows アプリケーション パッケージ プロジェクト (空のアプリ、パッケージ化 (デスクトップの WinUI 3) で取得する単一プロジェクトの MSIX ではなく) を使用している場合は、パッケージ 化プロジェクトのプロジェクト ファイルでも上記のすべての変更を行います。

注意

ライブラリ プロジェクトは変更しないでください。 自己完結型展開は、アプリ プロジェクト (および該当する場合は Windows アプリケーション パッケージ プロジェクト) でのみ構成する必要があります。

サンプル アプリについては、Windows App SDK の自己完結型デプロイのサンプルを参照してください

プロジェクト ファイルでプロパティをtrue設定WindowsAppSDKSelfContainedすると、Windows App SDK Framework パッケージの内容がビルド出力に抽出され、アプリケーションの一部としてデプロイされます。

注意

完全に自己完結型にするには 、.NET アプリを自己完結 型として発行する必要があります。 発行プロファイルを使用して .NET 自己完結型を構成する方法については、このサンプルを参照してくださいdotnet publish は、Windows App SDK 1.1 ではまだサポートされていません。

注意

C++ アプリでは、ハイブリッド CRT使用する必要があります。また、完全に自己完結型にする必要があります。 ソリューション内のすべてのプロジェクトに対して HybridCRT.props を Directory.Build.props からインポートすることをお勧めします (Directory.Build.props例を参照)。 パッケージ アプリもプロジェクト ファイルで設定 <UseCrtSDKReferenceStaticWarning>false</UseCrtSDKReferenceStaticWarning> する必要があります。 ハイブリッド CRT の使用方法については、 自己完結型展開 のサンプル アプリを参照してください。

アプリがパッケージ化されている場合 (詳細については、「展開の概要」を参照)、Windows App SDK の依存関係が MSIX パッケージ内のコンテンツとして含まれます。 アプリを展開するには、他のパッケージ アプリと同様に MSIX パッケージを登録する必要があります。

アプリが外部の場所でパッケージ化されている場合、またはパッケージ化されていない場合は、ビルド出力の横に Windows App SDK の依存関係が .exe コピーされます。 結果のファイルを xcopy で展開することも、カスタム インストーラーに含めることもできます。

追加の MSIX パッケージへの依存関係

Windows App SDK の少数の API は、重要なオペレーティング システム (OS) 機能を表す追加の MSIX パッケージに依存しています。

つまり、自己完結型アプリでこれらの API を使用する場合は、次のオプションがあります。

  1. 機能を省略可能にし、可能な場合にのみ明るくすることができます。 API の IsSupported メソッド (PushNotificationManager.IsSupported および AppNotificationManager.IsSupported) を呼び出すと、実行中のシステム上の呼び出し元アプリが API を使用できるかどうかを実行時に動的に確認できます。
    • これにより、自己完結型デプロイのシンプルさを損なうことなく、API の安全で条件付きでオプションの使用が可能になります。
    • OS サービスがアプリのデプロイの外部にインストールされている場合にのみ、アプリは適切な機能を起動します。 しかし、実際には、Singleton パッケージが存在しなくても API が機能する場合もあります。そのため、IsSupported を呼び出して確認することをお勧めします。
  2. アプリのインストールの一部として、必要な MSIX パッケージを展開します。
    • これにより、すべてのシナリオで API に依存できます。 ただし、アプリの展開の一環として依存関係の MSIX パッケージの展開を要求すると、自己完結型展開のシンプルさが損なわれる可能性があります。
  3. API を使用しないでください。
    • 追加のデプロイ要件なしで同様の機能を提供する代替 API を検討してください。

UndockedRegFreeWinRT の自動サポートのオプトアウト (または自動)

プロジェクト プロパティ WindowsAppSdkUndockedRegFreeWinRTInitialize は、(安定したチャネルから) Windows App SDK のバージョン 1.2 で導入されました。 このプロパティが true設定されている場合、Windows App SDK による登録不要の Windows ランタイム (UndockedRegFreeWinRT) の実装が、アプリの起動時に自動的に有効になります。 このサポートは、パッケージ化されていない自己完結型アプリで必要です。

WindowsAppSdkUndockedRegFreeWinRTInitialize は、WindowsAppSDKSelfContained が true で、WindowsPackageTypeNone で (Windows App SDK のバージョン 1.2 以降) OutputType プロジェクト プロパティが Exe または WinExe (つまり、プロジェクトによって実行可能ファイルが生成される) 場合、既定値は trueになります。 最後の条件は、既定でクラス ライブラリ DLL やその他の非実行可能ファイルに UndockedRegFreeWinRT の自動サポートを追加しないようにすることです。 非実行可能ファイル (UndockedRegFreeWinRT を初期化しないホスト プロセス実行可能ファイルによって読み込まれたテスト DLL など) で UndockedRegFreeWinRT の自動サポートが必要な場合は、プロジェクト<WindowsAppSdkUndockedRegFreeWinRTInitialize>true</WindowsAppSdkUndockedRegFreeWinRTInitialize>で明示的に有効にすることができます。