Xamarin.Android、Xamarin.iOS、Xamarin.Mac プロジェクトを .NET にアップグレードする

Xamarin ネイティブ プロジェクトを .NET にアップグレードするには、次の手順を実行する必要があります。

  • プロジェクト ファイルを SDK スタイルに更新します。
  • .NET 8 バージョンと互換性のない依存関係を更新または置き換えます。
  • アプリをコンパイルしてテストします。

ほとんどのプロジェクトでは、名前空間の変更などの書き換えを行う必要はありません。

アップグレード プロセスを簡略化するために、Xamarin ネイティブ プロジェクトと同じ型と名前の新しい .NET プロジェクトを作成してから、コード内でコピーすることをお勧めします。 これが、以下に示すアプローチです。

新しいプロジェクトの作成

Visual Studio で、Xamarin ネイティブ プロジェクトと同じ型と名前の新しい .NET プロジェクトを作成します。 たとえば、Xamarin.Android から .NET for Android にアップグレードするには、Android Application プロジェクト テンプレートを選びます。

Visual Studio で Android アプリ プロジェクト テンプレートを選んだスクリーンショット。

新しいプロジェクトには、既存のプロジェクトと同じプロジェクトとパッケージ名を指定し、新しいフォルダーに配置する必要があります。 プロジェクト ファイルを開くと、.NET SDK スタイルのプロジェクトがあることが確認されます。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0-android</TargetFramework>
    <SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
    <OutputType>Exe</OutputType>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <ApplicationId>com.companyname.AndroidApp2</ApplicationId>
    <ApplicationVersion>1</ApplicationVersion>
    <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
  </PropertyGroup>
</Project>

重要

ターゲット フレームワーク モニカー (TFM) は、プロジェクトが .NET (この場合は .NET 8) を使用していることを示します。 同等の Xamarin ネイティブ プロジェクトの有効な TFM は、net8.0-android、net8.0-ios、net8.0-macos、net8.0-tvos です。 SDK スタイルのプロジェクトのターゲット フレームワークの詳細については、「SDK スタイルのプロジェクトのターゲット フレームワーク」をご覧ください。

アプリを起動して、開発環境でアプリをビルドできることを確認します。

Merge files (ファイルのマージ)

コードとリソース ファイルを、Xamarin ネイティブ プロジェクトのフォルダーから新しいアプリ内の同等のフォルダーにコピーします。 同じ名前のすべてのファイルを上書きする必要があります。

他のライブラリ プロジェクトがある場合は、それらを新しいソリューションに追加し、新しい .NET プロジェクトからそれらにプロジェクト参照を追加する必要があります。

また、条件付きコンパイル引数やコード署名などの設定のために、Xamarin ネイティブ プロジェクトから新しい .NET プロジェクトにいくつかのプロジェクト プロパティをコピーする必要があります。 別々の Visual Studio インスタンスでプロジェクトを並べて開くと、プロジェクトのプロパティを比較できるようになります。 または、新しいプロジェクト ファイルを直接編集して設定を移行することもできます。 詳細については、「Xamarin.Android プロジェクトの移行」と「Xamarin Apple プロジェクトの移行」をご覧ください。

依存関係を更新する

一般に、Xamarin ネイティブ NuGet パッケージは、.NET TFM を使用して再コンパイルされていない限り、.NET 8 と互換性がありません。 ただし、.NET for Android アプリでは、monoandroid および monoandroidXX.X フレームワークをターゲットとする NuGet パッケージを使用できます。

パッケージが .NET 8 と互換性があることを確認するには、使用しているパッケージの NuGetFrameworks タブを参照し、次の表に示されている互換性のあるフレームワークの 1 つがリストされていることを確認します。

互換性のあるフレームワーク 互換性のないフレームワーク
net8.0-android、monoandroid、monoandroidXX.X
net8.0-ios monotouch、xamarinios、xamarinios10
net8.0-macos monomac、xamarinmac、xamarinmac20
net8.0-tvos xamarintvos
xamarinwatchos

Note

上記の互換性のないフレームワークに依存していない .NET Standard ライブラリは、引き続き .NET 8 と互換性があります。

NuGet 上のパッケージが、互換性のないフレームワークも含まれているかどうかに関係なく、上記の互換性のあるフレームワークのいずれかとの互換性を示している場合、そのパッケージには互換性があります。 互換性のある NuGet パッケージは、Visual Studio の NuGet パッケージ マネージャーを使用して、.NET ネイティブ プロジェクトに追加できます。

NuGet パッケージの .NET 8 互換バージョンが見つからない場合は、次の手順を実行する必要があります。

  • コードを所有している場合は、.NET TFM を使用してパッケージを再コンパイルします。
  • .NET 8 バージョンのパッケージのプレビュー リリースを探します。
  • 依存関係を .NET 8 互換の代替手段に置き換えます。

.NET for Android または .NET for iOS アプリで Xamarin.Essentials コードを移行する方法の詳細については、「.NET for Android および .NET for iOS アプリで Xamarin.Essentials コードを移行する」を参照してください。

コンパイルとトラブルシューティング

依存関係が解決され、コードとリソース ファイルが .NET ネイティブ プロジェクトに追加されたら、プロジェクトをビルドする必要があります。 エラーがあれば、次の手順に進みます。

ヒント

  • 特に .NET バージョンを変更する場合は、Visual Studio でプロジェクトを開いてビルドする前に、すべてのプロジェクトからすべての bin フォルダーと obj フォルダーを削除してください。
  • Android プロジェクトから Resource.designer.cs で生成されたファイルを削除します。