ComponentOne 利用ガイド
移行手順
移行ガイド > 各種移行資料 > Xamarin から .NET MAUI への移行情報 > 移行手順

このセクションでは、C1Xamarin に添付の「C1Calendar101」サンプルを使用して、手動で(.NET アップグレードアシスタントを使用せずに) .NET MAUI プロジェクトへ移行する場合の移行手順の一例を紹介します。

このトピックの内容

 1. 移行先となる .NET MAUI アプリケーションを作成する

Visual Studio にて、元のアプリと同じ名前で新しい「.NET MAUI アプリ」プロジェクトを作成します。これにより、単一プロジェクト形式の .NET MAUI プロジェクトが作成されます。



別の名前でプロジェクトを作成することもできますが、この場合は既定の名前空間が元のプロジェクトとは別のものになるため、コードの移行後に名前空間の変更作業も別途必要となります。

 2. C1MAUIの NuGet パッケージをインストールする

移行可能なコンポーネント」の一覧をもとに、元の Xamarin.Forms プロジェクトで使用していた C1Xamarin のコンポーネントを探し、それに対応する C1MAUI コンポーネントが含まれる NuGet パッケージを .NET MAUI プロジェクトにインストールします。

例えば C1Calendar101 サンプルでは C1Calendar コンポーネントを使用していたので、対応する .NET MAUI 用の C1Calendar コンポーネントが含まれる「C1.Maui.Calendar.Ja」パッケージをインストールします。

パッケージをインストールしたら、C1MAUI 製品ヘルプの「クイックスタート」を参考に、アプリのセットアップ(.RegisterCalendarControls() の追加など)を行います。

 3. Xamarin プロジェクトから .NET MAUI プロジェクトへ必要なコンテンツをコピーする

Xaml およびコードをコピーする

Xamarin.Forms プロジェクトで追加・編集した Xaml ファイルおよびコードファイルを、.NET MAUI プロジェクトにコピーします。このとき、それぞれのファイルは、.NET MAUI プロジェクト内の同じ名前のフォルダにコピーするようにします。

例えば C1Calendar101 サンプルでは、C1Calendar101.XF プロジェクトに含まれる、以下の画像で赤く囲ったファイルおよびフォルダ(フォルダ内のすべてのサブフォルダおよびファイルを含む)を .NET MAUI プロジェクトにコピーします。

各ファイルのビルドアクションは、それぞれ適切なもの(埋め込みリソースなど)に変更します。xaml ファイルについては、ビルドアクションを「MauiXaml」に変更します。

.NET MAUI アプリに構成をコピーする

元のプロジェクトのアプリケーション情報やプラットフォーム固有の構成などを .NET MAUI プロジェクトにコピーします。.NET MAUI プロジェクトにおける共通のアプリケーションマニフェストは、プロジェクトのプロパティのうち、[MAUI 共有]-[全般]にて設定します。

なお、.NET MAUI プロジェクトには Platforms フォルダが用意されており、.NET MAUI がターゲットにできるプラットフォームを示すそれぞれのサブフォルダに対して、プラットフォーム固有の設定やコードを含めることができます。元のプロジェクトにて、プラットフォーム固有のコードを追加していた場合は、それらも同様に Platforms フォルダ配下の適切な場所にコピーします。

プラットフォーム固有のデータは、それぞれ以下のように対応します。

.NET MAUI アプリにリソースをコピーする

必要に応じて、アプリケーションアイコンやスプラッシュ画像などのリソースファイルもコピーします。.NET MAUI プロジェクトでは、「Resources」フォルダおよびそのサブフォルダに各種リソースファイルを配置します。

 4. プラットフォーム固有の名前空間を変更する

Xamarin.Forms 関連の名前空間を、対応する Microsoft.Maui 名前空間に変更する

Xamarin.Forms から .NET MAUI への移行に伴い、主要なライブラリにおける名前空間が変更され、Xamarin.Essentials の機能は .NET MAUI の一部になりました。そのため、コードを移行する際には、それぞれ対応する名前空間への置き換えが必要です。以下に、それぞれ対応する主な名前空間を示します。

Xamarin.Forms 名前空間 Microsoft.Maui 名前空間
Xamarin.Forms Microsoft.Maui および Microsoft.Maui.Controls
Xamarin.Forms.DualScreen Microsoft.Maui.Controls.Foldable
Xamarin.Forms.Maps Microsoft.Maui.Controls.Maps と Microsoft.Maui.Maps
Xamarin.Forms.PlatformConfiguration Microsoft.Maui.Controls.PlatformConfiguration
Xamarin.Forms.PlatformConfiguration.AndroidSpecific Microsoft.Maui.Controls.PlatformConfiguration.AndroidSpecific
Xamarin.Forms.PlatformConfiguration.AndroidSpecific.AppCompat Microsoft.Maui.Controls.PlatformConfiguration.AndroidSpecific.AppCompat
Xamarin.Forms.PlatformConfiguration.iOSSpecific Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific
Xamarin.Forms.PlatformConfiguration.TizenSpecific Microsoft.Maui.Controls.PlatformConfiguration.TizenSpecific
Xamarin.Forms.PlatformConfiguration.WindowsSpecific Microsoft.Maui.Controls.PlatformConfiguration.WindowsSpecific
Xamarin.Forms.Shapes Microsoft.Maui.Controls.Shapes
Xamarin.Forms.StyleSheets Microsoft.Maui.Controls.StyleSheets
Xamarin.Forms.Xaml Microsoft.Maui.Controls.Xaml

また、既定の名前空間が Xamarin.Forms の「http://xamarin.com/schemas/2014/forms」 から .NET MAUI の「http://schemas.microsoft.com/dotnet/2021/maui」に変更されているので、こちらも同様に置換を行います。

なお、置き換えにあたっては、プロジェクトもしくはソリューション全体に対するテキスト置換を行うのが簡単です。

C1.Xamarin.Forms 関連の名前空間を、対応する C1.Maui 名前空間に変更する

C1Xamarin から C1MAUI へ移行するので、C1Xamarin の名前空間についても同様に置き換えが必要となります。以下に、それぞれ対応する主な名前空間を示します。

C1Xamarin C1MAUI
C1.Xamarin.Forms.Calendar C1.Maui.Calendar
C1.Xamarin.Forms.Chart C1.Maui.Chart
C1.Xamarin.Forms.Core C1.Maui.Core
C1.Xamarin.Forms.Gauge -
C1.Xamarin.Forms.Grid C1.Maui.Grid、C1.Maui.GridControl
C1.Xamarin.Forms.Input C1.Maui.Input
C1.Xamarin.Forms.Viewer -

また、既定の名前空間が C1Xamarin の「http://schemas.grapecity.com/xf/2019/xaml」から C1MAUI の「http://schemas.componentone.com/winfx/2006/xaml」に変更されているので、こちらも同様に置換を行います。

 5. プラットフォームの仕様に起因する機能の相違に対処する

C1Xamarin と C1MAUI のコンポーネント間においては多くの機能で互換性がありますが、一部の機能においては、プラットフォームの仕様に起因して、プロパティ名や引数の型などに違いがあります。移行にあたっては、それらの違いを考慮して、コードの修正を行う必要があります。

例えば、C1Xamarin の C1Calendar コンポーネントの各要素では、前景色を示すプロパティは「~TextColor」、背景色を示すプロパティは「~BackColor」というプロパティ名となっていますが、C1MAUI の C1Calendar コンポーネントの各要素ではそれぞれ「~Foreground」「~Background」というプロパティ名になっており、これらは手動で修正する必要があります。また、C1Xamarin のコンポーネントの特定の機能が C1MAUI のコンポーネントでは未実装の場合があるので、利用できない機能は手動で削除するか代替機能に置き換える必要があります。

C1Calendar101 サンプルの CustomAppearance.xaml を例に挙げると、ハイライトで示した部分を修正することになります。

C1Xamarin C1MAUI
<c1:C1Calendar x:Name="calendar" BackgroundColor="#FFEBEBEB" VerticalOptions=" FillAndExpand"
   TextColor="Black"
   AdjacentDayTextColor="#FFA5A5A3"
   DayBorderColor="#FFF2F2F2"
   DayBorderWidth="1"
  FontFamily="Courier New"
  FontSize="16"
   BorderColor="#FF343434"
   BorderWidth="4"
   DayOfWeekBackgroundColor="#FF63A646"
   DayOfWeekTextColor="White"
  DayOfWeekFormat="d"
  DayOfWeekFontFamily="Courier New"
  DayOfWeekFontSize="21"
   HeaderBackgroundColor="#FF3D834B"
   HeaderTextColor="White"
  HeaderFontFamily="Courier New"
  HeaderFontSize="21"
   SelectionBackgroundColor="#FFD2D2D2"
   SelectionTextColor="Black"
  TodayFontAttributes="Bold"/>
<c1:C1Calendar x:Name="calendar" BackgroundColor="#FFEBEBEB" VerticalOptions="Fill"
  Foreground="Black"
  AdjacentDayForeground="#FFA5A5A3"
  DayBorderBrush="#FFF2F2F2"
  DayBorderThickness="1"
  FontFamily="Courier New"
  FontSize="16"
  BorderBrush="#FF343434"
  BorderThickness="4"
  DayOfWeekBackground="#FF63A646"
  DayOfWeekForeground="White"
  DayOfWeekFormat="d"
  DayOfWeekFontFamily="Courier New"
  DayOfWeekFontSize="21"
  HeaderBackground="#FF3D834B"
  HeaderForeground="White"
  HeaderFontFamily="Courier New"
  HeaderFontSize="21"
  SelectionBackground="#FFD2D2D2"
  SelectionForeground="Black"
  TodayFontAttributes="Bold"/>
 6. 動作を確認する

コードの修正などを一通り終えたら、デバッグ実行して動作を確認します。移行にあたって必要な修正が適切に行われていれば、以前と同様にアプリが実行されます。デスクトップアプリについては、Xamarin の UWP から .NET MAUI の WinUI に切り替わります。


関連トピック