次の方法で共有


プロジェクトのプロパティと自動初期化子

このトピックでは、自動初期化子の構成など、アプリの展開方法をカスタマイズするために Visual Studio プロジェクト ファイルで設定できるプロジェクト プロパティ ( .csproj.vcxprojなど) について説明します。

Windows App SDK の自動初期化子

Windows App SDK には、Windows アプリ ランタイムが適切に初期化されていることを確認するジョブを持つルーチンがいくつかあります。 これらのルーチンは、アプリケーションのエントリ ポイントの前に自動的に実行され、初期化作業を行うため、自動初期化子と呼ばれます。

ヒント

技術的な詳細に興味がある場合。 C++ では、自動初期化子は静的クラス コンストラクターを使用して実装されます。 C# では、自動初期化子は .NET モジュール初期化子を使用して実装されます。 そのため、適切な用語が自動 初期化子 である場合に使用されるモジュール 初期化子が読み上げられる場合があります。

すべての自動初期化子は、アプリのパッケージ化とデプロイの構成に基づいて、既定で条件付きで有効になります。 これらの詳細を次に示します。

  • ブートストラップ (動的依存関係とも呼ばれます) 自動初期化子。 この自動初期化子は、アプリの起動時にブートストラップ API を自動的に呼び出します。 Windows アプリ ランタイムがアプリのパッケージ グラフに確実に追加されるようにするには、フレームワークに依存するパッケージ化されていないアプリに必要です。 フレームワークに依存する (および自己完結型) アプリの詳細については、 Windows App SDK の展開の概要に関するページを参照してください。 パッケージ化されていない (パッケージ化されていない) アプリの詳細については、 Windows アプリのパッケージ化、展開、およびプロセスに関するページを参照してください。
    • パッケージ アプリの場合、 appxmanifest.xml ファイルはフレームワークの依存関係を表しているため、ブートストラップ/動的依存関係の自動初期化子は必要ありません。 また、自己完結型アプリの場合、ブートストラップ/動的依存関係の自動初期化子は必要ありません。これらのアプリではフレームワークが使用されないためです。
    • .csprojを使用して、.vcxprojまたは<WindowsAppSdkBootstrapInitialize>false</WindowsAppSdkBootstrapInitialize> ファイル内のブートストラップ/動的依存関係の自動初期化子をオプトアウトできます。
  • Deployment Manager の自動初期化子。 これは、メイン/シングルトン機能 (プッシュ通知など) を利用するフレームワーク依存のパッケージ アプリでは、 appxmanifest.xml ファイルでそれらの依存関係を表現できないために必要です。
    • 自己完結型アプリの場合、これらのアプリはメイン/シングルトン機能をサポートしていないため、Deployment Manager 自動初期化子は必要ありません。
    • 詳細については、このトピックで後述する 「Deployment Manager 自動初期化子 」セクションを参照してください。
  • 登録不要のアクティブ化自動初期化子。 これは、アプリが Windows 10 May 2019 Update (バージョン 1903、 "19H1" というコード名) より前のオペレーティング システム バージョンでダウンレベルで実行されている場合に、自己完結型アプリでマニフェスト ベースのドッキングされていない登録なしの Windows ランタイム (WinRT) ライセンス認証 (UndockedRegFreeWinRT) を使用するために必要です。
    • フレームワークに依存するアプリや、Windows 10 バージョン 1903 以降を対象とする自己完結型アプリの場合、登録不要のアクティブ化自動初期化子は必要ありません。 これらのアプリは、 <WindowsAppSdkUndockedRegFreeWinRTInitialize>false</WindowsAppSdkUndockedRegFreeWinRTInitialize>経由でオプトアウトできます。
  • 互換性の自動初期化子。 これは、アプリが A/B コンテインメント機能を使用してサービス リリースの動作を制御するために必要です。 詳細については、「 RuntimeCompatibilityOptions」を参照してください。
    • A/B 包含を使用しないアプリ (既定) の場合、互換性自動初期化子は必要ありません。

デプロイメントマネージャー自動初期化機能

Windows App SDK 1.8 以降を使用するアプリが起動すると、Deployment Manager の自動初期化子が 既定で実行されます。 ただし、その発生をオプトアウトできます。 このセクションでは、Deployment Manager 自動初期化子の実行を許可する利点と注意事項について説明し、オプトアウトするかどうかを決定するのに役立ちます。

アプリで Main/Singleton パッケージ (プッシュ通知など) の機能を利用するには、1. Deployment API を使用して、それらのパッケージが確実にデプロイされるようにする必要があります (Main/Singleton パッケージはフレームワークではなく、アプリなどの "メイン" パッケージであるため、アプリの appx マニフェストに依存関係として登録できません。代わりに、Deployment API には、これらのパッケージをデプロイする機能が用意されています)。 2. 1 のため、アプリは DeploymentManager.Initialize を呼び出すことによって、Deployment Manager を初期化する必要があります。 ご利用のアプリでは、表示されるとおり、自動的に、または明示的に実行できます。 3. メイン/シングルトン パッケージに依存するように、アプリはフレームワークに依存するパッケージ 化されたアプリである必要があります。

Deployment Manager を初期化する 1 つの方法は、Deployment Manager の自動初期化子の実行を許可することです (このトピック の「Windows App SDK の自動初期化子 」セクションを参照)。 Deployment Manager 自動初期化子は DeploymentManager.Initialize を呼び出します。 Deployment Manager を初期化するもう 1 つの方法は、 DeploymentManager.Initialize を明示的に呼び出す方法です。

(Windows App SDK 1.8 以降を使用する) アプリで Main/Singleton パッケージが必要ない場合は、アプリのプロジェクト ファイルで WindowsAppSdkDeploymentManagerInitialize プロパティを false に設定して、Deployment Manager の自動初期化子をオプトアウトする必要があります。

(Windows App SDK 1.8 以降を使用する) アプリに Main/Singleton パッケージ 必要な場合は、次のいずれかを実行できます。

  • Deployment Manager 自動初期化子の実行を許可します (既定では実行されます)。
  • または、アプリのプロジェクト ファイルで WindowsAppSdkDeploymentManagerInitialize プロパティを false に設定して、Deployment Manager 自動初期化子をオプトアウトします。 その後、 DeploymentManager.Initialize を明示的に呼び出す必要があります。

Important

AppContainer で実行されているプロセスで DeploymentManager.Initialize を呼び出す場合は、アプリでpackageManagement制限された機能を宣言する必要があります。

プロジェクトのプロパティ

次の表に、アプリのプロジェクト ファイルで設定できるプロパティを示します。 Windows App SDK の自動初期化子の詳細については、前のセクション (上記) を参照してください。

プロパティ名と説明 価値観 詳細については、次のページを参照してください。
AppxPackage。 WinUI 3 アプリをパッケージ化するかどうかを指定します。 false (パッケージ化されていないアプリの場合)、または存在しない (パッケージアプリの場合) WinUI アプリのパッケージ化を解除する
EnableMsixTooling。 プロジェクトの単一プロジェクト MSIX 機能を有効にします。 true (有効にする場合)、または存在しない (無効にする場合) 単一プロジェクト MSIX を使用してアプリをパッケージ化する
UseWinUI。 アプリで WinUI 3 ユーザー インターフェイス フレームワークを使用するかどうかを指定します。 true、または absent ( false の場合) Windows App SDK の WinUI (WinUI 3)
WindowsAppSdkBootstrapInitialize。 Windows App SDK がブートストラップ/動的依存関係の自動初期化子を利用するかどうかを決定します。 true (実行可能ファイルの既定値)、 false (非実行可能ファイルの既定値) 自動初期化子のオプトアウト (または自動初期化)
WindowsAppSdkDeploymentManagerInitialize。 Windows App SDK が Deployment Manager 自動初期化子を利用するかどうかを決定します。 true (既定値)、 false
WindowsAppSDKRuntimePatchLevel1WindowsAppSDKRuntimePatchLevel2および WindowsAppSDKDisabledChanges。 Windows App SDK が互換性自動初期化子を利用するかどうかを判断し、サービス更新プログラムに追加された変更の Windows アプリ ランタイム動作に必要な互換性オプションを構成します。 さまざまな、または存在しない (自動初期化子を無効にする) RuntimeCompatibilityOptions
WindowsAppSdkSelfContained。 アプリが 自己完結型にデプロイされているかどうかを判断します。 true、または absent ( false の場合) 自己完結型アプリの Windows App SDK 展開ガイド
WindowsAppSdkUndockedRegFreeWinRTInitialize。 Windows App SDK が登録不要のアクティブ化自動初期化子を利用するかどうかを決定します。 true (実行可能ファイルの既定値)、 false (非実行可能ファイルの既定値) UndockedRegFreeWinRT の自動サポートのオプトアウト (または自動)
WindowsPackageType。 パッケージ化されていないアプリの <WindowsPackageType>None</WindowsPackageType> を設定すると、ブートストラップ/動的依存関係の自動初期化子によって、アプリに最も適したバージョンの Windows App SDK バージョンが見つけて読み込まれます。 なし、または存在しない (自動初期化子を無効にする場合) WinUI アプリのパッケージ化を解除する

バックグラウンドでの自動初期化子のオプトアウト

Example

C# WinUI 3 プロジェクトの一般的な .csproj ファイルからの抜粋を次に示します。上の表のプロジェクト プロパティの一部が使用されています。

...
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
    <TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
    ...
    <UseWinUI>true</UseWinUI>
    <EnableMsixTooling>true</EnableMsixTooling>
  </PropertyGroup>
...