🍳

WinUI3でとりあえずなんか動かしたいときの下準備

2024/09/23に公開

最近、WinUI3を触るようになってきました。
皆さんだいたい新しいものを使うときには、どんな風に書くのか動くのかを試すのにやまほど新規にプロジェクトを作ると思うのですが、WinUI3はそれがなにかとめんどくさいので私なりの手順をメモ。

  • 2024-09-23時点
  • Visual Studio 2022 Version 17.11.4
  • Microsoft.WindowsAppSDK 1.6.240829007

※今のところWindowsで動くもので、storeなんかで配布するようなものじゃないもの、しかやらないので、それに特化しています。

1. WinUI3のプロジェクトを作る

一番上のやつ。

2. パッケージのアップデート

まだまだアップデートが頻繁なので。

3. csprojの編集

3.1 WindowsPackageVersion

まずこれを追加する必要があります。

<WindowsSdkPackageVersion>10.0.22621.38</WindowsSdkPackageVersion>

初期状態だとエラーが出て、追加するように言われます。

3.2 TargetFramework

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

3.3 WindowsPackageType

<WindowsPackageType>None</WindowsPackageType>

3.4 Nullable

<Nullable>enable</Nullable>

3.5 RuntimeIdentifiers

条件分けとかいらんのでこれだけ。

<RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>

3.6 削除

この辺の邪魔なのは消してしまいます。

<ApplicationManifest>app.manifest</ApplicationManifest>
<PublishProfile>win-$(Platform).pubxml</PublishProfile>
<EnableMsixTooling>true</EnableMsixTooling>

<ItemGroup>
    <Content Include="Assets\SplashScreen.scale-200.png" />
    <Content Include="Assets\LockScreenLogo.scale-200.png" />
    <Content Include="Assets\Square150x150Logo.scale-200.png" />
    <Content Include="Assets\Square44x44Logo.scale-200.png" />
    <Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
    <Content Include="Assets\StoreLogo.png" />
    <Content Include="Assets\Wide310x150Logo.scale-200.png" />
</ItemGroup>

<ItemGroup>
    <Manifest Include="$(ApplicationManifest)" />
</ItemGroup>

<!--
Defining the "Msix" ProjectCapability here allows the Single-project MSIX Packaging
Tools extension to be activated for this project even if the Windows App SDK Nuget
package has not yet been restored.
-->
<ItemGroup Condition="'$(DisableMsixProjectCapabilityAddedByProject)'!='true' and '$(EnableMsixTooling)'=='true'">
    <ProjectCapability Include="Msix" />
</ItemGroup>

<!--
Defining the "HasPackageAndPublishMenuAddedByProject" property here allows the Solution
Explorer "Package and Publish" context menu entry to be enabled for this project even if
the Windows App SDK Nuget package has not yet been restored.
-->
<PropertyGroup Condition="'$(DisableHasPackageAndPublishMenuAddedByProject)'!='true' and '$(EnableMsixTooling)'=='true'">
    <HasPackageAndPublishMenu>true</HasPackageAndPublishMenu>
</PropertyGroup>

4. ファイルの削除

  • Properties\PublishProfiles フォルダまるごと
  • Assetsの中身(なんか画像とか使うときはここに入れるけど、デフォルトの中身はいらない)
  • app.manifest
  • Package.appxmanifest

5. launchSettings.jsonの編集

Unpackagedの方だけ残して、表示名も変更。

{
  "profiles": {
    "WinUI3App1": {
      "commandName": "Project"
    }
  }
}

結果

これで、なんかややこしいものをそぎ落とした最低限の構成なのかなぁと思います。

ファイル構成

csproj

<Project Sdk="Microsoft.NET.Sdk">
	<PropertyGroup>
		<OutputType>WinExe</OutputType>
		<TargetFramework>net8.0-windows10.0.22621.0</TargetFramework>
		<TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
		<RootNamespace>WinUI3Project</RootNamespace>
		<Platforms>x86;x64;ARM64</Platforms>
		<RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>
		<Nullable>enable</Nullable>
		<UseWinUI>true</UseWinUI>
		<WindowsPackageType>None</WindowsPackageType>
		<WindowsSdkPackageVersion>10.0.22621.38</WindowsSdkPackageVersion>
	</PropertyGroup>

	<ItemGroup>
		<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.26100.1" />
		<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.6.240829007" />
	</ItemGroup>

	<ItemGroup>
	  <Folder Include="Assets\" />
	</ItemGroup>
</Project>

あとは…

UI周りで色々やるには、Windows Community Toolkit あたりは必須になってくる気がするので、

  • CommunityToolkit.WinUI.Controls.Primitives
  • CommunityToolkit.WinUI.Controls.SettingsControls

この辺などを入れることになるのかなと思います。

Discussion