次の方法で共有


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

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

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

プロジェクト ファイルに設定された WindowsAppSDKSelfContained プロパティを示すスクリーンショット。

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

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

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

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

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

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

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

アプリが外部の場所でパッケージ化されている場合、またはパッケージ化されていない場合は、ビルド出力の .exe の横に Windows App SDK の依存関係がコピーされます。 結果のファイルを 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 、WindowsPackageType 場合に true を しますNone で(Windows App SDK のバージョン 1.2 以降)、OutputType プロジェクト プロパティ Exe または WinExe 設定されます (つまり、)。 プロジェクトによって実行可能ファイルが生成されます)。 最後の条件は、既定でクラス ライブラリ DLL やその他の非実行可能ファイルに UndockedRegFreeWinRT の自動サポートを追加しないようにすることです。 非実行可能ファイル 自動 UndockedRegFreeWinRT サポートが必要 場合 (たとえば、UndockedRegFreeWinRT を初期化しないホスト プロセス実行可能ファイルによって読み込まれたテスト DLL)、を使用してプロジェクトで明示的に有効にすることができます。