🐙

.NET 8 で WinUI 3 アプリをビルドする(NETSDK1083 対策)

2024/01/13に公開

はじめに

本稿執筆時点では、WinUI 3 アプリのターゲットフレームワークを .NET 8 にするとビルド時に NETSDK1083 エラーが発生しますので、その解決方法です。

症状

Template Studio for WinUI で新しいソリューションを作成し、配下の 2 つのプロジェクト(メインプロジェクトと Core プロジェクト)のターゲットフレームワークを 「.NET 7.0」から「.NET 8.0」にします。

ソリューションをビルドすると、以下のエラーが発生します。

NETSDK1083	指定された RuntimeIdentifier 'win10-x64' は認識されません。詳細については、「https://aka.ms/netsdk1083」を参照してください。

'win10-x64' の部分が 'win10-x64' 'win10-x64' になっているエラーと合わせて、合計 3 つの NETSDK1083 エラーが発生します。

https://aka.ms/netsdk1083 に記載の通り、.NET 8 でランタイム識別子 (RID) グラフがシンプル化されたことによるものです。

解決方法① 昔に戻す

プロジェクトファイル

メインプロジェクトをダブルクリックによりテキストモードで開き(プロパティーではなく)、PropertyGroupUseRidGraph を追加します。

<PropertyGroup>
	<UseRidGraph>true</UseRidGraph>
</PropertyGroup>

以上でビルドできるようになります。

メリット・デメリット

この方法は、とても簡単なのがメリットです。

一方で、理由があって導入されたものをなかったことにするので、.NET 8 のメリットの 1 つを享受できないことになり、将来的にはあまり良い方法とは言えないかもしれません。

解決方法② 新しい動作に対応する

プロジェクトファイル

メインプロジェクトをダブルクリックによりテキストモードで開き(プロパティーではなく)、

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

となっている行を

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

のように変更します。win10win にする形です。

x64 しか使わないのであれば

<RuntimeIdentifiers>win-x64</RuntimeIdentifiers>

のほうがシンプルです。

pubxml ファイル

メインプロジェクト配下にある
Properties\PublishProfiles\win10-x64.pubxml
を適当なテキストエディタで開き、

<RuntimeIdentifier>win10-x64</RuntimeIdentifier>

となっている行を

<RuntimeIdentifier>win-x64</RuntimeIdentifier>

のように変更します。先ほどと同じく win10win にする形です。

x64 以外も使う場合は、win10-x86.pubxml win10-arm64.pubxml も同様に変更します。

以上でビルドできるようになります。

メリット・デメリット

.NET 8 の流儀に沿えるのがメリットです。

一方で、Win2D を使用したアプリは実行時にエラーとなったので、改善の余地があるかもしれません。

確認環境

項目 環境
OS Windows 11 Pro 23H2
Visual Studio 2022 17.8.4
Template Studio for WinUI 5.5
.NET 8.0
Windows App SDK 1.4.4 (1.4.231219000)

参考リンク

主な改訂履歴

  • 2024/01/13 初版。
  • 2024/01/18 昔に戻す方法を記載。
  • 2024/11/20 .NET 9 について記載。

Discussion