.NET 8 で WinUI 3 アプリをビルドする(NETSDK1083 対策)
はじめに
本稿執筆時点では、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) グラフがシンプル化されたことによるものです。
解決方法① 昔に戻す
プロジェクトファイル
メインプロジェクトをダブルクリックによりテキストモードで開き(プロパティーではなく)、PropertyGroup
に UseRidGraph
を追加します。
<PropertyGroup>
<UseRidGraph>true</UseRidGraph>
</PropertyGroup>
以上でビルドできるようになります。
メリット・デメリット
この方法は、とても簡単なのがメリットです。
一方で、理由があって導入されたものをなかったことにするので、.NET 8 のメリットの 1 つを享受できないことになり、将来的にはあまり良い方法とは言えないかもしれません。
解決方法② 新しい動作に対応する
プロジェクトファイル
メインプロジェクトをダブルクリックによりテキストモードで開き(プロパティーではなく)、
<RuntimeIdentifiers>win10-x86;win10-x64;win10-arm64</RuntimeIdentifiers>
となっている行を
<RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>
のように変更します。win10
を win
にする形です。
x64 しか使わないのであれば
<RuntimeIdentifiers>win-x64</RuntimeIdentifiers>
のほうがシンプルです。
pubxml ファイル
メインプロジェクト配下にある
Properties\PublishProfiles\win10-x64.pubxml
を適当なテキストエディタで開き、
<RuntimeIdentifier>win10-x64</RuntimeIdentifier>
となっている行を
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
のように変更します。先ほどと同じく win10
を win
にする形です。
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