アドベントカレンダー完走を目指すシリーズ。
我ながら無茶ですねぇ。帰りも遅いのに。
書きかけ。
この記事ではWinUI3のプロジェクト構成を詳しく解説します。なるべくドキュメントも付けます。
WinUI3のプロジェクト構成
App1
┗━ Properties
┣ win-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 のランタイム統合を保証。
- パッケージ情報定義: アプリケーションの名前、発行者、バージョン、パッケージ ID を指定。
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 展開も可能)。
- 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。
- 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 パッケージがこれを展開します。
- 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。
- 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
-
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 に準拠。 -
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 とペア使用。 -
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 強化。 -
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
トラブルシューティング: バージョン不整合時は 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) アプリケーションの名前、バージョン、アーキテクチャ(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 パッケージ化時に、これが正しく解決される必要あり。
- 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 のマニフェスト)と連携。例: 権限やエントリ ポイントは両方で同期。
-
注意点とトラブルシューティングバージョン互換性: 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 の を再確認。 -
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 アクティベーション)。 -
サンプル(WinUI 3 向け app.manifest)以下は、WinUI 3 プロジェクト(.NET 9、Windows App SDK 1.8)の実用的な例:xml
- まとめ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)を動作させるため、ランタイムの正しい配置が必須。このクラスは手動初期化コードを省略し、シームレスな起動を実現。
- 動作の背景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)と連携。
- 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)や自動修復オプションを指定。
- 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 アクティベーションをサポート。
- 注意点とトラブルシューティングエラー: ランタイム欠如:エラー コード 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 はパッケージ依存エラー。
- プロジェクトでの統合例以下は、WinUI 3 プロジェクト(.NET 9、Windows App SDK 1.8)の関連設定例:.csproj:xml
app.manifest(関連部分):xml
- まとめ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.pngWindowsAppSDKWindowsAppSDK-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 バージョンを特定。
記事について
参考になりましたらいいね、面白くなかったらミュート、技術者らしい心ないコメントをお願いしています。