.NET MAUIプロジェクトとxUnitテストプロジェクト間で参照が正しく解決されない場合があります。この記事では、その問題を解決する方法を解説します。
問題の概要
- .NET MAUIプロジェクトとxUnitテストプロジェクト間で参照が正しく解決されない。
- ソリューションエクスプローラーに黄色い!マークが表示される。
-
using
ディレクティブがグレーアウトし、クイックアクションメニューに「usingディレクティブは必要ありません」と表示される。
解決策
.NET MAUIプロジェクトのターゲットフレームワークにnet6.0
を追加することで、両方のプロジェクトで同じフレームワークを使用し、参照が正しく解決されるようになります。
手順
- Visual Studioで、対象の.NET MAUIプロジェクト(例:
MauiTestSample
)の*.csprojファイルを開きます。- ソリューションエクスプローラーで、対象のプロジェクトを右クリックし、「プロジェクト ファイルの編集」を選択します。
-
<TargetFrameworks>
要素を見つけ、以下の行を追加します。
<TargetFrameworks>$(TargetFrameworks);net6.0</TargetFrameworks>
これにより、ターゲットフレームワークにnet6.0
が追加されます。変更後の*.csprojファイルは以下のようになります。
<Project Sdk="Microsoft.NET.Sdk">
<!-- 省略 -->
<PropertyGroup>
<TargetFrameworks>net6.0-android;net6.0-ios;net6.0-maccatalyst</TargetFrameworks>
<TargetFrameworks>$(TargetFrameworks);net6.0</TargetFrameworks>
<!-- 省略 -->
</PropertyGroup>
<!-- 省略 -->
</Project>
ファイルを保存し、Visual Studioでプロジェクトをリロードします。
ソリューションエクスプローラーでプロジェクトを右クリックし、「プロジェクトのリロード」を選択します。
ソリューションをクリーンし、再ビルドします。
これにより、参照が正しく解決され、黄色い!マークが消えるはずです。ただし、注意すべき点として、これによりマルチターゲットプロジェクトが.NET 6.0としてもビルドされるため、プラットフォーム固有のコードの条件付きコンパイルに注意する必要があります。これは、.NET 6.0ターゲットがプラットフォーム固有のAPIにアクセスできないため、実行時に問題が発生する可能性があります。
まとめ
.NET MAUIプロジェクトとxUnitテストプロジェクト間の参照問題は、ターゲットフレームワークにnet6.0
を追加することで解決できます。ただし、プラットフォーム固有のコードの条件付きコンパイルに注意し、.NET 6.0ターゲットで実行時に問題が発生しないように適切な対応を行ってください。
参考文献
[1] 増田智明. .NET MAUIによるマルチプラットフォームアプリ開発: iOS、Android、Windows、macOS対応アプリをC#で開発. Kindle版, 2023. Amazon.co.jp