4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WinUI3のプロジェクト構成詳解

4
Last updated at Posted at 2025-11-11

アドベントカレンダー完走を目指すシリーズ。
我ながら無茶ですねぇ。帰りも遅いのに。

書きかけ。

この記事ではWinUI3のプロジェクト構成を詳しく解説します。なるべくドキュメントも付けます。

WinUI3のプロジェクト構成

App1
┗━ Propertieswin-arm64.pubxml
    ┣ win-x64.pubxml
    ┗ win-x86.pubxml

依存関係
┗━ アセンブリ
    ┣ Microsoft.Web.WebView2.Core.Projection
    ┣ Microsoft.Windows.AI.MachineLearning.Projection
┗━ アナライザー
    ┣ Microsoft.CodeAnalysis.CSharp.NetAnalyzers
    ┣ Microsoft.CodeAnalysis.NetAnalyzers
    ┣ Microsoft.Interop.ComInterfaceGenerator
    ┣ Microsoft.Interop.LibraryImportGenerator
    ┣ Microsoft.Interop.SourceGeneration
    ┣ System.Text.Json.SourceGeneration
    ┣ System.Text.RegularExpressions.Generator
    ┗ WinRT.SourceGenerator

パッケージ
┗━ Microsoft.Windows.SDK.BuildTools (10.0.26100.6901)
┗━ Microsoft.WindowsAppSDK (1.8.251003001)

フレームワーク
 ┗━ Microsoft.NETCore.App
 ┗━ Microsoft.Windows.SDK.NET.Ref.Windows
 ┗━ Microsoft.Windows.SDK.NET
 ┗━ WinRT.Runtime
 ┗━ WinRT.SourceGenerator

app.manifest
App.xaml
DeploymentManagerAutolnitializer.cs
Autolnitialize
MainWindow.xaml
C# MainWindow.xaml.cs
Package.appxmanifest
WindowsAppSDK-VersionInfo.cs
    

各フォルダ・構成要素の説明

Properties フォルダ

  • 役割: アプリの公開(デプロイ)設定を格納するフォルダ。

  • 詳細: 異なるアーキテクチャ向けの公開プロファイルを定義します。

    • win-arm64.pubxml: ARM64アーキテクチャ向け(例:Surface Pro Xなど)
    • win-x64.pubxml: 標準的な64ビットデスクトップPC向け
    • win-x86.pubxml: 32ビット環境向け(レガシー対応)

依存関係

アセンブリ

  • Microsoft.Web.WebView2.Core.Projection

    • 役割: WebView2コントロールを利用するためのアセンブリ。
    • 詳細: Edge(Chromiumベース)のWebView2をWinUI 3アプリに統合し、HTMLやJavaScriptを描画可能にします。
    • 使用例: アプリ内でWebベースのダッシュボードやヘルプを表示する場合。
  • Microsoft.Windows.AI.MachineLearning.Projection

    • 役割: Windows ML(機械学習)APIを利用するためのアセンブリ。
    • 詳細: ONNX形式のモデルを実行し、GPU/CPUでの推論を可能にします。
    • 使用例: 画像認識・自然言語分析など、AI機能をアプリに組み込む場合。

アナライザー

  • Microsoft.CodeAnalysis.CSharp.NetAnalyzers

    • 役割: C#コード専用の静的解析ツール。
    • 詳細: コード品質・パフォーマンス改善・潜在的なバグを検出します。
  • Microsoft.CodeAnalysis.NetAnalyzers

    • 役割: .NET全体に適用可能な汎用アナライザー。
    • 詳細: セキュリティや互換性など、クロスプラットフォームのルールを提供。
  • Microsoft.Interop.ComInterfaceGenerator

    • 役割: COMインターフェースの自動生成を支援。
    • 詳細: WinUI 3がWin32やCOMベースのAPIと相互運用する際のインターフェースコードを生成。
  • Microsoft.Interop.LibraryImportGenerator

    • 役割: ネイティブライブラリとの相互運用コードを自動生成。
    • 詳細: C++やWin32関数をC#から呼び出すためのP/Invokeコードを自動生成。
  • Microsoft.Interop.SourceGeneration

    • 役割: 相互運用全般のソースコード生成を支援。
    • 詳細: COMやネイティブAPI連携を効率化する補助ツール。
  • System.Text.Json.SourceGeneration

    • 役割: JSON処理の最適化コードを生成。
    • 詳細: System.Text.Jsonによるシリアル化/デシリアル化を高速化。
  • System.Text.RegularExpressions.Generator

    • 役割: 正規表現の最適化コードを生成。
    • 詳細: 正規表現パターンを事前コンパイルしてパフォーマンスを向上。
  • WinRT.SourceGenerator

    • 役割: Windows Runtime(WinRT)APIのコード生成。
    • 詳細: WinUI 3アプリがWinRTコンポーネントへアクセスするためのコードを生成し、API呼び出しを簡略化。

パッケージ

  • Microsoft.WindowsAppSDK (バージョン: 1.8.251003001)
    このパッケージは、Windows App SDK のコア ライブラリを提供します。WinUI 3 の UI コンポーネント(例: XAML ベースのコントロール)や、Windows ランタイム (WinRT) API、バックワード コンパチビリティ サポートを含みます。

デスクトップ アプリに Windows 11 の最新機能(例: スナップ レイアウト、通知など)を追加可能にします。主な役割:WinUI 3 の UI フレームワークを提供(例: NavigationView, Acrylic などのコントロール)。
フレームレス ウィンドウ、印刷 API、WebView2 統合などのプラットフォーム機能。
プロジェクトの実行時依存関係を管理(MSIX パッケージ化もサポート)。

WinUI 3 プロジェクトでの使用例:プロジェクトの .csproj ファイルに

<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.8.251003001" />

を追加。
ビルド時にランタイム フレームワークを自動展開(Self-Contained 展開も可能)。

  • Microsoft.Windows.SDK.BuildTools (バージョン: 10.0.26100.6901)

このパッケージは、Windows SDK のビルド ツール(ヘッダー、ライブラリ、メタデータ、コンパイラ ツール)を包含します。WinUI 3 プロジェクトのコンパイルとリンクに必要で、ネイティブ コードや .NET 統合をサポートします。

  • 主な役割:Windows SDK (10.0.26100) 向けのプロジェクトをビルドするためのツールチェーンを提供。
    C++/C# プロジェクトのインクルード パス、ライブラリ参照を管理。
    MSIX パッケージングやデプロイ ツールを含む(Single-Project MSIX 機能)。

  • WinUI 3 プロジェクトでの使用例:.csproj に

<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.26100.6901" /> 

を追加。
Visual Studio なしでのビルドも可能(MSBuild を使用)。ただし、Visual Studio インストールが推奨されます。

  • Microsoft.NETCore.App

    • 主な役割: .NET のコア ランタイムを提供し、ガベージ コレクション、型システム、基本ライブラリ(System 名前空間)を扱います。WinUI 3 では Windows 拡張(WinRT API 呼び出し)を基盤とし、クロスプラットフォーム互換性を確保。
    • プロジェクトでの使用: net9.0-windows10.0.19041.0 で暗黙参照。明示的に を追加可能。Self-Contained 展開でランタイムをバンドル。
  • Microsoft.Windows.SDK.NET.Ref.Windows

    • 主な役割: Windows SDK の参照アセンブリ(メタデータのみ)を提供し、WinRT/Win32 API の型情報を .NET に投影。コンパイル時のインテリセンスと型チェックを強化し、ランタイム コードは生成せず参照専用。
    • プロジェクトでの使用: で指定。Microsoft.Windows.SDK.BuildTools と連携し、WinUI 3 コントロールの API を .NET からアクセス。
  • Microsoft.Windows.SDK.NET

    • 主な役割: Windows SDK の .NET バインディングを提供し、WinRT API の実行時サポート。参照アセンブリと組み合わせて API 呼び出し(ファイル I/O、通知など)を可能にし、C#/WinRT で型マッピングを実行。

    • プロジェクトでの使用:

  <FrameworkReference Include="Microsoft.Windows.SDK.NET" /> 

で指定。WinUI 3 のフレームレス ウィンドウや印刷で使用。BuildTools が展開。

  • WinRT.Runtime
    • 主な役割: WinRT タイプ(Windows.Foundation.Uri など)を .NET でネイティブ扱いするためのランタイム アセンブリ。C#/WinRT が生成した投影をサポートし、コレクション/文字列の変換を処理。WinUI 3 の XAML Islands で必須。.NET 6 以降のビルトイン削除を補完。
    • プロジェクトでの使用: Microsoft.Windows.CsWinRT NuGet 経由で自動参照。
<FrameworkReference Include="WinRT.Runtime" /> 

可能。登録フリー アクティベーションをサポート。

  • WinRT.SourceGenerator
    • 主な役割: WinRT メタデータ(.winmd)から C# ソースを自動生成するソース ジェネレーター。インターロップ アセンブリを作成し、WinRT API を async/await 対応で自然使用。型安全性とパフォーマンス向上。
    • プロジェクトでの使用:
      C#/WinRT の cswinrt.exe で動作。<UseWinRT>true</UseWinRT>
      で統合。カスタム WinRT コンポーネント生成に使用。

app.manifest

  • app.manifest の役割
    アプリケーションのメタデータ定義: アプリケーション名、バージョン、発行者、実行可能ファイルの情報を指定。
    システム互換性設定: Windows のバージョン(例: Windows 10/11)、DPI スケーリング、テーマ対応を制御。
    セキュリティと権限: UAC(ユーザー アカウント制御)の実行レベル(例: asInvoker)や、特定の機能(例: マイク、カメラ)へのアクセス許可を定義。
    依存関係の指定: Windows API(WinRT/Win32)や COM コンポーネントの依存を明示。
    WinUI 3 特有の用途: MSIX パッケージ化時のエントリ ポイント設定や、フレームレス ウィンドウの互換性確保。

DeploymentManagerAutoInitializer.cs

目的: Windows App SDK のランタイム(Microsoft.WindowsAppRuntime)をアプリケーションの起動時に自動的に初期化し、依存コンポーネント(例: WinRT API、WinUI 3 ライブラリ)の配置を保証。

  • 主な機能:
    • 動的デプロイメント: MSIX パッケージ外のランタイム(例: Framework Package)を検出し、必要に応じてインストールまたは更新。
    • 初期化チェック: Windows App Runtime のバージョン(例: 1.8.0)を確認し、互換性を検証。
      エラー処理: ランタイムが見つからない、またはバージョンが不一致の場合に適切な例外をスロー。

Package.appxmanifest

Package.appxmanifest は、WinUI 3 プロジェクト(Windows App SDK を使用した .NET ベースのデスクトップ アプリケーション)で使用される MSIX パッケージのマニフェスト ファイルです。この XML ファイルは、アプリケーションのパッケージ情報、機能、エントリ ポイント、視覚的資産、依存関係、システム要件を定義し、Windows ストア配布やサイドロード(ローカル展開)に必要です。WinUI 3 の「Blank App, Packaged (WinUI 3 in Desktop)」テンプレートでは、Visual Studio が自動生成します。

  • Package.appxmanifest の役割
    • パッケージ情報定義: アプリケーションの名前、発行者、バージョン、パッケージ ID を指定。
      機能(Capabilities)指定: マイク、カメラ、インターネット接続など、アプリが必要とする権限を定義。
    • エントリ ポイント設定: アプリケーションの起動方法(例: WinUI 3 の XAML ベースのエントリ)を指定。
    • 視覚的資産: アイコン、タイル、ロゴ、スプラッシュ スクリーンなどのビジュアルを定義。
    • 依存関係管理: Windows App Runtime(例: Microsoft.WindowsAppRuntime 1.8)や他の Framework Package を指定。
    • 配布と互換性: MSIX パッケージの展開形式(ストア、サイドロード)や、対象 OS(Windows 10/11)を制御。
    • WinUI 3 特有の用途: WinUI 3 の XAML UI(Microsoft.UI.Xaml)と Windows App SDK のランタイム統合を保証。

Package.appxmanifest は、app.manifest(アプリケーションの実行環境設定)と連携し、特に MSIX パッケージ化時に重要です。

WindowsAppSDK-VersionInfo.cs

新しいポストを表示

WinUI3 プロジェクトのパッケージに関して解説パッケージ
Microsoft.Windows.SDK.BuildTools (10.0.26100.6901)
Microsoft.WindowsAppSDK (1.8.251003001)

8秒間シンキングしました

WinUI 3 プロジェクトのパッケージ解説WinUI 3 は、Windows App SDK を基盤とした現代的な UI フレームワークで、Windows デスクトップ アプリケーションの開発に使用されます。指定されたパッケージは、WinUI 3 プロジェクトの構築に不可欠な NuGet パッケージです。これらは Visual Studio で新しい WinUI 3 プロジェクトを作成すると自動的に参照されます。以下で、各パッケージの概要、役割、バージョン情報を解説します。1. Microsoft.WindowsAppSDK (バージョン: 1.8.251003001)このパッケージは、Windows App SDK のコア ライブラリを提供します。WinUI 3 の UI コンポーネント(例: XAML ベースのコントロール)や、Windows ランタイム (WinRT) API、バックワード コンパチビリティ サポートを含みます。デスクトップ アプリに Windows 11 の最新機能(例: スナップ レイアウト、通知など)を追加可能にします。主な役割:WinUI 3 の UI フレームワークを提供(例: NavigationView, Acrylic などのコントロール)。
フレームレス ウィンドウ、印刷 API、WebView2 統合などのプラットフォーム機能。
プロジェクトの実行時依存関係を管理(MSIX パッケージ化もサポート)。

バージョン情報:これは Windows App SDK 1.8.2 の安定版リリース(Stable channel)で、2025 年 10 月 14 日に公開されました。

learn.microsoft.com

更新内容: ONNX Runtime の更新、Python バインディングの追加(デバイス/メモリ タイプのサポート強化)、セッション メタデータの詳細露出など。

learn.microsoft.com +1

互換性: Windows 10 (バージョン 1809 以降) および Windows 11 を対象。

WinUI 3 プロジェクトでの使用例:プロジェクトの .csproj ファイルに を追加。
ビルド時にランタイム フレームワークを自動展開(Self-Contained 展開も可能)。

  1. Microsoft.Windows.SDK.BuildTools (バージョン: 10.0.26100.6901)このパッケージは、Windows SDK のビルド ツール(ヘッダー、ライブラリ、メタデータ、コンパイラ ツール)を包含します。WinUI 3 プロジェクトのコンパイルとリンクに必要で、ネイティブ コードや .NET 統合をサポートします。主な役割:Windows SDK (10.0.26100) 向けのプロジェクトをビルドするためのツールチェーンを提供。
    C++/C# プロジェクトのインクルード パス、ライブラリ参照を管理。
    MSIX パッケージングやデプロイ ツールを含む(Single-Project MSIX 機能)。

バージョン情報:Windows SDK 10.0.26100 のビルド ツール版で、2025 年 10 月 24 日頃に公開。

nuget.org +1

対応 OS: Windows 11 の最新ビルド(例: OS Build 26100.6901 の品質向上更新を含む)。

support.microsoft.com

注意: このパッケージ自体にフレームワーク アセットは含まれず、純粋にビルド ツール専用。

WinUI 3 プロジェクトでの使用例:.csproj に を追加。
Visual Studio なしでのビルドも可能(MSBuild を使用)。ただし、Visual Studio インストールが推奨されます。

learn.microsoft.com

これらのパッケージの関係とプロジェクト設定WinUI 3 プロジェクトでは、以下の流れでこれらを使用します:プロジェクト作成: Visual Studio で「Blank App, Packaged (WinUI 3 in Desktop)」テンプレートを選択すると、自動的にこれらのパッケージが追加されます。

learn.microsoft.com

依存関係: WindowsAppSDK が UI/API を提供し、SDK.BuildTools がビルドを支えます。バージョン不整合時は NuGet パッケージ マネージャーで更新。

WinUI 3 プロジェクト(Windows App SDK を使用した .NET ベースのデスクトップ アプリケーション)では、プロジェクトファイル(.csproj)で <TargetFramework>(例: net8.0-windows10.0.19041.0)を指定し、<ItemGroup> 内に <FrameworkReference> 要素としてこれらのフレームワークを参照します。これらは、.NET ランタイム、Windows SDK の API アクセス、WinRT(Windows Runtime)の相互運用性を提供します。主に C#/WinRT ツールキットと連携し、WinUI 3 の XAML UI や Win32 インターロップを可能にします。これらのフレームワークは、Visual Studio の WinUI 3 テンプレートで自動的に追加されますが、手動で調整可能です。以下で各フレームワークの役割、バージョン情報、プロジェクトでの使用を解説します。バージョンは .NET 8/9 や Windows SDK 10.0.26100(2025 年時点の最新)に基づきます。1. Microsoft.NETCore.App主な役割: .NET のコア ランタイム フレームワークを提供します。WinUI 3 プロジェクトの基盤として、ガベージ コレクション、型システム、基本ライブラリ(例: System.Collections)を扱います。Windows 固有の拡張(WinRT API 呼び出し)を追加でサポートします。
プロジェクトでの使用:

<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>

で暗黙的に参照。

<FrameworkReference Include="Microsoft.NETCore.App" />

を明示的に追加可能。Self-Contained 展開でランタイムをバンドルします。

Microsoft.Windows.SDK.NET.Ref.Windows

  • 主な役割: Windows SDK の参照アセンブリ(メタデータのみ)を .NET に投影します。WinRT/Win32 API の型情報を提供し、コンパイル時のインテリセンスや型チェックを強化。ランタイム コードは生成せず、参照専用です。
    プロジェクトでの使用: で指定。Microsoft.Windows.SDK.BuildTools パッケージと連携し、WinUI 3 の UI コントロール(例: Button)の API を .NET からアクセス可能にします。
    バージョン情報: Windows SDK 10.0.26100 に準拠(2025 年 10 月リリース)。TFM(Target Framework Moniker)とアライン(例: windows10.0.26100.0)。依存: Microsoft.Windows.SDK.BuildTools。
  1. Microsoft.Windows.SDK.NET主な役割: Windows SDK の .NET バインディングを提供し、WinRT API の実行時サポートを担います。参照アセンブリ(上記)と組み合わせて、実際の API 呼び出し(例: ファイル I/O、通知)を可能にします。C#/WinRT 経由で型マッピング(WinRT の IInspectable を .NET の object に変換)を行います。
    プロジェクトでの使用:
<FrameworkReference Include="Microsoft.Windows.SDK.NET" /> 

で指定。WinUI 3 のフレームレス ウィンドウや印刷機能で使用。BuildTools パッケージがこれを展開します。

  1. WinRT.Runtime主な役割:
  • WinRT タイプ(例: Windows.Foundation.Uri)を .NET でネイティブに扱うためのランタイム アセンブリ。C#/WinRT が生成した投影をサポートし、コレクションや文字列の相互変換を処理。WinUI 3 の XAML Islands(Win32 ホスト内での WinRT UI)で不可欠です。 .NET 6 以降でビルトインサポートが削除されたため、このアセンブリで補完。
    プロジェクトでの使用:
<PackageReference Include="Microsoft.Windows.CsWinRT" />

経由で自動参照。 も可能。Windows App SDK と統合され、登録フリーのアクティベーションをサポート。
バージョン情報: C#/WinRT 2.0.9 以降(2025 年現在)。埋め込みサポート(バージョン 1.4.1+)で DLL を出力から除外可能。依存: Windows SDK.NET。

  1. WinRT.SourceGenerator主な役割: WinRT メタデータ(.winmd ファイル)から C# ソースコードを自動生成するソース ジェネレーター。インターロップ アセンブリを作成し、WinRT API を .NET で自然に使用可能に(例: async/await 対応)。ビルド時処理で、型安全性とパフォーマンスを向上。
    プロジェクトでの使用: Microsoft.Windows.CsWinRT NuGet パッケージの cswinrt.exe で動作。WinUI 3 プロジェクトで true を有効にすると統合。カスタム WinRT コンポーネントの投影生成に使用。
    バージョン情報: C#/WinRT 2.0+(ソース生成強化)。 .NET 9 で Native AOT 対応。依存: Roslyn コンパイラ。

これらのフレームワークの関係とプロジェクト設定依存関係: Microsoft.NETCore.App が基盤。Windows SDK.NET(Ref + 本体)が WinRT を支え、WinRT.Runtime/SourceGenerator が投影を生成/実行。すべて Windows App SDK(例: バージョン 1.8)で統合。

トラブルシューティング: バージョン不整合時は NuGet で更新。 .NET 9 Preview で UWP 互換性が向上。 最小 OS: Windows 10 バージョン 1809。

C#/WinRTの詳細解説

フレームワーク
Microsoft.NETCore.App
Microsoft.Windows.SDK.NET.Ref.Windows
Microsoft.Windows.SDK.NET
WinRT.Runtime
WinRT.SourceGenerator

  1. Microsoft.Windows.SDK.NET.Ref.Windows主な役割: Windows SDK の参照アセンブリ(メタデータのみ)を提供し、WinRT/Win32 API の型情報を .NET に投影。コンパイル時のインテリセンスと型チェックを強化し、ランタイム コードは生成せず参照専用。
    プロジェクトでの使用: で指定。Microsoft.Windows.SDK.BuildTools と連携し、WinUI 3 コントロールの API を .NET からアクセス。
    バージョン情報: 10.0.26100.81(NuGet、2025 年対応)。TFM と同期(例: windows10.0.26100.0)。Windows 11 SDK に準拠。

  2. Microsoft.Windows.SDK.NET主な役割: Windows SDK の .NET バインディングを提供し、WinRT API の実行時サポート。参照アセンブリと組み合わせて API 呼び出し(ファイル I/O、通知など)を可能にし、C#/WinRT で型マッピングを実行。
    プロジェクトでの使用: で指定。WinUI 3 のフレームレス ウィンドウや印刷で使用。BuildTools が展開。
    バージョン情報: 10.0.26100(Windows SDK 最新、2025 年)。依存: Ref.Windows と WinRT.Runtime。NuGet で Microsoft.Windows.SDK.NET.Ref とペア使用。

  3. WinRT.Runtime主な役割: WinRT タイプ(Windows.Foundation.Uri など)を .NET でネイティブ扱いするためのランタイム アセンブリ。C#/WinRT が生成した投影をサポートし、コレクション/文字列の変換を処理。WinUI 3 の XAML Islands で必須。.NET 6 以降のビルトイン削除を補完。
    プロジェクトでの使用: Microsoft.Windows.CsWinRT NuGet 経由で自動参照。 可能。登録フリー アクティベーションをサポート。
    バージョン情報: C#/WinRT 2.2.0(2024 年 11 月リリース、NuGet)。1.4.1 以降で埋め込みサポート(DLL 除外可能)。2025 年 prerelease で .NET AOT 強化。

  4. WinRT.SourceGenerator主な役割: WinRT メタデータ(.winmd)から C# ソースを自動生成するソース ジェネレーター。インターロップ アセンブリを作成し、WinRT API を async/await 対応で自然使用。型安全性とパフォーマンス向上。
    プロジェクトでの使用: C#/WinRT の cswinrt.exe で動作。true で統合。カスタム WinRT コンポーネント生成に使用。
    バージョン情報: C#/WinRT 2.2.0(最新)。.NET 9 で Native AOT 対応強化。依存: Roslyn コンパイラ。GitHub で 2025 年 prerelease あり。

これらのフレームワークの関係とプロジェクト設定依存関係: Microsoft.NETCore.App が基盤。SDK.NET(Ref + 本体)が WinRT を支え、WinRT.Runtime/SourceGenerator が投影生成/実行。Windows App SDK 1.8 で統合。
.csproj 例(.NET 9/WinUI 3 向け、簡略):xml

net9.0-windows10.0.26100.0 true

トラブルシューティング: バージョン不整合時は NuGet 更新。最小 OS: Windows 10 バージョン 1809。2025 年更新で AOT と埋め込みサポートが強化され、ビルド時間短縮。

app.manifest

  • WinUI 3 プロジェクト(Windows App SDK を使 用した .NET ベースのデスクトップ アプリケーション)では、app.manifest(アプリケーション マニフェスト)はアプリケーションの実行環境、セキュリティ設定、システム要件、依存関係を定義する XML ファイルです。主に Windows 固有の設定(例: DPI 認識、UI 機能の互換性、権限)を制御し、MSIX パッケージ化やデプロイに影響します。WinUI 3 の「Blank App, Packaged (WinUI 3 in Desktop)」テンプレートでは、既定で生成されます。以下では、app.manifest の役割、構造、一般的な設定、WinUI 3 プロジェクトでの使用方法を、2025 年 11 月時点の最新情報(Windows App SDK 1.8、.NET 9/10、Windows SDK 10.0.26100)に基づいて解説します。1. app.manifest の役割アプリケーションのメタデータ定義: アプリケーション名、バージョン、発行者、実行可能ファイルの情報を指定。
    システム互換性設定: Windows のバージョン(例: Windows 10/11)、DPI スケーリング、テーマ対応を制御。
    セキュリティと権限: UAC(ユーザー アカウント制御)の実行レベル(例: asInvoker)や、特定の機能(例: マイク、カメラ)へのアクセス許可を定義。
    依存関係の指定: Windows API(WinRT/Win32)や COM コンポーネントの依存を明示。
    WinUI 3 特有の用途: MSIX パッケージ化時のエントリ ポイント設定や、フレームレス ウィンドウの互換性確保。

Visual Studio では、app.manifest はプロジェクトのルート(または Properties フォルダ)に配置され、.csproj で として参照されます。2. app.manifest の基本構造以下は、WinUI 3 プロジェクトの典型的な app.manifest の構造(簡略化版)です:xml

My WinUI 3 Application

PerMonitorV2 true
  1. 主要セクションの解説(1) アプリケーションの名前、バージョン、アーキテクチャ(x86/x64/ARM64)を定義。
    WinUI 3 では、MSIX パッケージ名と一致させる(例: name="MyCompany.MyApp")。
    例:

(2) 対象 OS を指定(例: Windows 11 の GUID {8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a})。
WinUI 3 では、Windows 10 バージョン 1809(10.0.17763)以降をサポート。Windows 11 固有機能(スナップ レイアウトなど)を使用する場合、最新の GUID を追加。

(3) UAC の実行レベルを指定:asInvoker: 標準ユーザー権限(WinUI 3 のデフォルト)。
requireAdministrator: 管理者権限(例: システム設定変更時)。

uiAccess="true" は、リモート デスクトップやアクセシビリティ対応時に必要。

(4) (DPI 設定)DPI スケーリングを制御:dpiAwareness="PerMonitorV2": 高 DPI ディスプレイで動的スケーリング(WinUI 3 推奨)。
dpiAware="true": DPI 対応の明示。

WinUI 3 の XAML UI は PerMonitorV2 で最適化され、4K やマルチモニター環境に対応。

(5) Windows App SDK や他のランタイム(例: Microsoft.WindowsAppRuntime)の依存を指定。
例: Windows App SDK 1.8 の依存を で定義。
MSIX パッケージ化時に、これが正しく解決される必要あり。

  1. WinUI 3 プロジェクトでの設定と使用生成と参照: Visual Studio の WinUI 3 テンプレート(「Blank App, Packaged」)で app.manifest が自動生成。.csproj に以下で参照:xml

カスタマイズ例:高 DPI 対応: PerMonitorV2 を追加し、WinUI 3 のスケーリングを最適化。
管理者権限: でシステム変更を許可。
Windows 11 テーマ: で最新テーマ(Mica/Acrylic)を有効。

MSIX パッケージとの統合: app.manifest の設定は Package.appxmanifest(MSIX のマニフェスト)と連携。例: 権限やエントリ ポイントは両方で同期。

  1. 注意点とトラブルシューティングバージョン互換性: Windows App SDK 1.8(2025 年 10 月リリース)では、Windows SDK 10.0.26100 に対応。app.manifest の を最新 GUID に更新。
    依存エラー: のバージョンが Windows App SDK と一致しない場合、起動エラー(例: 0x8007007E)が発生。NuGet パッケージ(Microsoft.WindowsAppSDK 1.8.251003001)を確認。
    DPI 問題: dpiAwareness を設定しないと、高 DPI 環境で UI がぼやける。WinUI 3 では PerMonitorV2 が必須。
    ビルド統合: Visual Studio 2022(17.10+)または MSBuild でビルド。手動編集後、.csproj の を再確認。

  2. 2025 年の最新情報Windows App SDK 1.8: 2025 年 10 月 14 日リリース(1.8.251003001)。app.manifest に として Microsoft.WindowsAppRuntime 1.8 を指定。
    Windows SDK 10.0.26100: 2025 年 10 月対応。 に最新 GUID を使用。
    .NET 10 Preview: 2025 年 7 月リリース予定。WinUI 3 プロジェクトは .NET 9/10 で AOT 対応強化。app.manifest の依存設定は変わらず。
    C#/WinRT 2.2.0: WinRT 投影の依存を で明示可能(例: COM アクティベーション)。

  3. サンプル(WinUI 3 向け app.manifest)以下は、WinUI 3 プロジェクト(.NET 9、Windows App SDK 1.8)の実用的な例:xml

WinUI 3 Application with Windows App SDK 1.8 PerMonitorV2 true true
  1. まとめapp.manifest は WinUI 3 プロジェクトの実行環境を定義し、DPI、OS 互換性、権限、依存を制御。
    Windows App SDK 1.8 と Windows SDK 10.0.26100 に準拠し、.NET 9/10 で最適化。
    MSIX パッケージ化時は Package.appxmanifest と連携し、エントリ ポイントや権限を整合。
    詳細は Microsoft Learn の「Application Manifests」ドキュメントを参照。互換性テストを推奨。

何か特定の設定(例: 特定の権限や COM 依存)について深掘りが必要ですか?

DeploymentManagerAutoInitializer.cs

DeploymentManagerAutoInitializer.cs 解説(WinUI 3 プロジェクト)DeploymentManagerAutoInitializer.cs は、WinUI 3 プロジェクト(Windows App SDK を使用した .NET ベースのデスクトップ アプリケーション)で使用される、Windows App SDK のデプロイメント初期化を自動化するための内部クラスです。このファイルは通常、プロジェクトに直接表示されず、Windows App SDK のランタイム(Microsoft.WindowsAppRuntime)に含まれる生成コードまたはテンプレートの一部として動作します。主に MSIX パッケージ化されたアプリケーションで、Windows App Runtime(Windows App SDK の実行環境)を動的に初期化・配置する役割を果たします。以下では、DeploymentManagerAutoInitializer.cs の目的、機能、WinUI 3 プロジェクトでの役割を、2025 年 11 月時点の最新情報(Windows App SDK 1.8.251003001、.NET 9/10、Windows SDK 10.0.26100)に基づいて解説します。1. DeploymentManagerAutoInitializer.cs の役割目的: Windows App SDK のランタイム(Microsoft.WindowsAppRuntime)をアプリケーションの起動時に自動的に初期化し、依存コンポーネント(例: WinRT API、WinUI 3 ライブラリ)の配置を保証。
主な機能:動的デプロイメント: MSIX パッケージ外のランタイム(例: Framework Package)を検出し、必要に応じてインストールまたは更新。
初期化チェック: Windows App Runtime のバージョン(例: 1.8.0)を確認し、互換性を検証。
エラー処理: ランタイムが見つからない、またはバージョンが不一致の場合に適切な例外をスロー。

WinUI 3 での重要性: WinUI 3 は Windows App SDK に依存し、XAML UI や WinRT API(例: 通知、WebView2)を動作させるため、ランタイムの正しい配置が必須。このクラスは手動初期化コードを省略し、シームレスな起動を実現。

  1. 動作の背景MSIX と Windows App Runtime:WinUI 3 プロジェクトの「Packaged」テンプレートは MSIX 形式で配布され、Windows App Runtime を Framework Package として参照。
    DeploymentManagerAutoInitializer は、アプリケーション起動時にこの Framework Package が正しくロードされることを保証。
    Self-Contained 展開(ランタイムをアプリにバンドル)でも、初期化ロジックを簡素化。

C#/WinRT 統合: WinRT API の投影(例: Microsoft.UI.Xaml)は Windows App Runtime に依存。DeploymentManagerAutoInitializer はこれを透過的に準備。
関連ファイル: app.manifest の セクションで指定された Microsoft.WindowsAppRuntime(例: 1.8.0.0)と連携。

  1. DeploymentManagerAutoInitializer.cs の内部構造このファイルは Windows App SDK のソースコード(GitHub リポジトリ microsoft/WindowsAppSDK)または生成コードに含まれ、以下のようなロジックを実装します(擬似コードで簡略化):csharp

using Microsoft.Windows.ApplicationModel.DynamicDependency;

namespace Microsoft.Windows.AppRuntime.Deployment
{
internal static class DeploymentManagerAutoInitializer
{
[System.Runtime.CompilerServices.ModuleInitializer]
internal static void Initialize()
{
try
{
// Windows App Runtime のバージョンをチェック
var status = DeploymentManager.GetStatus();
if (status.State != DeploymentStatus.Ok)
{
// ランタイムが見つからない、または不一致
DeploymentManager.Initialize(new DeploymentInitializeOptions
{
MinimumVersion = new Version(1, 8, 0, 0),
AutoRepair = true
});
}
}
catch (DeploymentException ex)
{
// エラー処理(例: ログ記録、例外スロー)
throw new InvalidOperationException("Failed to initialize Windows App Runtime", ex);
}
}
}
}

キー ポイント:[ModuleInitializer]: .NET 6 以降の機能で、モジュール(アセンブリ)ロード時に自動実行される静的メソッドを指定。
DeploymentManager: Windows App SDK の API(Microsoft.Windows.ApplicationModel.DynamicDependency)で、ランタイムの状態管理と初期化を担当。
DeploymentInitializeOptions: 最小バージョン(例: 1.8.0)や自動修復オプションを指定。

  1. WinUI 3 プロジェクトでの使用自動生成: Visual Studio 2022(17.10+)の WinUI 3 テンプレート(「Blank App, Packaged」)を使用すると、プロジェクトに DeploymentManagerAutoInitializer.cs は直接表示されず、Windows App SDK の NuGet パッケージ(Microsoft.WindowsAppSDK 1.8.251003001)に組み込まれる。
    関連設定:.csproj: で Windows App SDK を参照。
    app.manifest: に Microsoft.WindowsAppRuntime を指定(例: version="1.8.0.0")。
    TFM: net9.0-windows10.0.26100.0 で Windows SDK 10.0.26100 を対象。

カスタマイズ:通常、開発者はこのクラスを直接編集しない。カスタム初期化が必要な場合、DeploymentManager.Initialize を Main や App.xaml.cs で手動呼び出し。
例(手動初期化):csharp

using Microsoft.Windows.ApplicationModel.DynamicDependency;

public class Program
{
[STAThread]
static void Main(string[] args)
{
DeploymentManager.Initialize(new DeploymentInitializeOptions
{
MinimumVersion = new Version(1, 8, 0, 0)
});
var app = new App();
app.Run();
}
}
DeploymentManagerAutoInitializer はランタイム 1.8.0 を対象に最適化。ONNX Runtime 更新や Python バインディング強化が含まれるが、初期化ロジックに直接影響なし。
Windows SDK 10.0.26100: 2025 年 10 月リリース。DeploymentManager はこの SDK の WinRT API を投影。
.NET 10 Preview: 2025 年 7 月予定。AOT コンパイル対応強化で、Self-Contained 展開時の初期化が高速化。
C#/WinRT 2.2.0: 2024 年 11 月リリース。DeploymentManagerAutoInitializer は C#/WinRT の投影を利用し、登録フリー COM アクティベーションをサポート。

  1. 注意点とトラブルシューティングエラー: ランタイム欠如:エラー コード 0x80073D27(ランタイムが見つからない)場合、Windows App Runtime がインストールされていない。Microsoft.WindowsAppRuntime.Redist を手動インストール(Microsoft Store またはオフライン配布)。
    解決: DeploymentManager.Initialize の AutoRepair=true を有効化。

バージョン不一致:app.manifest の と NuGet パッケージのバージョン(1.8.251003001)が一致しない場合、初期化失敗。両者を同期。
例:

Self-Contained 展開:.csproj に true を設定すると、ランタイムをアプリにバンドル。DeploymentManagerAutoInitializer はバンドル済みリソースを優先。

デバッグ:Visual Studio の出力ウィンドウで DeploymentManager のログを確認。
例: Deployment failed with HRESULT 0x80073CF3 はパッケージ依存エラー。

  1. プロジェクトでの統合例以下は、WinUI 3 プロジェクト(.NET 9、Windows App SDK 1.8)の関連設定例:.csproj:xml
net9.0-windows10.0.26100.0 true true

app.manifest(関連部分):xml

  1. まとめDeploymentManagerAutoInitializer.cs は、Windows App SDK のランタイム初期化を自動化し、WinUI 3 アプリの起動を簡素化。
    Windows App SDK 1.8(2025 年 10 月)、.NET 9/10、C#/WinRT 2.2.0 に最適化。
    開発者は通常このファイルを直接触らず、app.manifest や .csproj で依存を管理。
    エラー時はランタイムのインストール状態やバージョンを確認。

特定のカスタマイズ(例: 手動初期化や AOT 対応)についてさらに知りたい場合、教えてください!

Package.appxmanifest

Package.appxmanifest 解説(WinUI 3 プロジェクト)Package.appxmanifest は、WinUI 3 プロジェクト(Windows App SDK を使用した .NET ベースのデスクトップ アプリケーション)で使用される MSIX パッケージのマニフェスト ファイルです。この XML ファイルは、アプリケーションのパッケージ情報、機能、エントリ ポイント、視覚的資産、依存関係、システム要件を定義し、Windows ストア配布やサイドロード(ローカル展開)に必要です。WinUI 3 の「Blank App, Packaged (WinUI 3 in Desktop)」テンプレートでは、Visual Studio が自動生成します。以下では、Package.appxmanifest の役割、構造、一般的な設定、WinUI 3 プロジェクトでの使用方法を、2025 年 11 月時点の最新情報(Windows App SDK 1.8.251003001、.NET 9/10、Windows SDK 10.0.26100)に基づいて解説します。また、app.manifest との関係も説明します。1. Package.appxmanifest の役割パッケージ情報定義: アプリケーションの名前、発行者、バージョン、パッケージ ID を指定。
機能(Capabilities)指定: マイク、カメラ、インターネット接続など、アプリが必要とする権限を定義。
エントリ ポイント設定: アプリケーションの起動方法(例: WinUI 3 の XAML ベースのエントリ)を指定。
視覚的資産: アイコン、タイル、ロゴ、スプラッシュ スクリーンなどのビジュアルを定義。
依存関係管理: Windows App Runtime(例: Microsoft.WindowsAppRuntime 1.8)や他の Framework Package を指定。
配布と互換性: MSIX パッケージの展開形式(ストア、サイドロード)や、対象 OS(Windows 10/11)を制御。
WinUI 3 特有の用途: WinUI 3 の XAML UI(Microsoft.UI.Xaml)と Windows App SDK のランタイム統合を保証。

Package.appxmanifest は、app.manifest(アプリケーションの実行環境設定)と連携し、特に MSIX パッケージ化時に重要です。2. Package.appxmanifest の基本構造以下は、WinUI 3 プロジェクトの典型的な Package.appxmanifest の構造(簡略化版)です:xml

My WinUI 3 App MyCompany A WinUI 3 application using Windows App SDK Assets\StoreLogo.png

WindowsAppSDKWindowsAppSDK-VersionInfo.cs

WinUI 3 プロジェクト(Windows App SDK を使用した .NET ベースのデスクトップ アプリケーション)で使用される、Windows App SDK のバージョン情報を提供する内部生成ファイルまたはソース コードです。このファイルは通常、開発者が直接プロジェクト内に作成するものではなく、Windows App SDK の NuGet パッケージ(Microsoft.WindowsAppSDK)に含まれるメタデータやビルド プロセスを通じて参照されます。主に、アプリケーションが依存する Windows App SDK のバージョン(例: 1.8.251003001)をプログラム的に取得・管理するために使用されます。

  • 目的: Windows App SDK のバージョン情報をアプリケーションに提供し、ランタイムやデプロイメントの互換性チェックをサポート

  • 主な機能:Windows App SDK のバージョン番号(例: 1.8.0.0)やビルド情報(例: 1.8.251003001)を公開。
    アプリケーションが依存するランタイム(Microsoft.WindowsAppRuntime)のバージョンを確認。
    デバッグやログ記録で、実行中の SDK バージョンを特定。

記事について

参考になりましたらいいね、面白くなかったらミュート、技術者らしい心ないコメントをお願いしています。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?