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



別の名前でプロジェクトを作成することもできますが、この場合は既定の名前空間が元のプロジェクトとは別のものになるため、コードの移行後に名前空間の変更作業も別途必要となります。
このセクションでは、C1Xamarin に添付の「C1Calendar101」サンプルを使用して、手動で(.NET アップグレードアシスタントを使用せずに) .NET MAUI プロジェクトへ移行する場合の移行手順の一例を紹介します。
Visual Studio にて、元のアプリと同じ名前で新しい「.NET MAUI アプリ」プロジェクトを作成します。これにより、単一プロジェクト形式の .NET MAUI プロジェクトが作成されます。
別の名前でプロジェクトを作成することもできますが、この場合は既定の名前空間が元のプロジェクトとは別のものになるため、コードの移行後に名前空間の変更作業も別途必要となります。
「移行可能なコンポーネント」の一覧をもとに、元の Xamarin.Forms プロジェクトで使用していた C1Xamarin のコンポーネントを探し、それに対応する C1MAUI コンポーネントが含まれる NuGet パッケージを .NET MAUI プロジェクトにインストールします。
例えば C1Calendar101 サンプルでは C1Calendar コンポーネントを使用していたので、対応する .NET MAUI 用の C1Calendar コンポーネントが含まれる「C1.Maui.Calendar.Ja」パッケージをインストールします。
パッケージをインストールしたら、C1MAUI 製品ヘルプの「クイックスタート」を参考に、アプリのセットアップ(.RegisterCalendarControls() の追加など)を行います。
Xamarin.Forms プロジェクトで追加・編集した Xaml ファイルおよびコードファイルを、.NET MAUI プロジェクトにコピーします。このとき、それぞれのファイルは、.NET MAUI プロジェクト内の同じ名前のフォルダにコピーするようにします。
例えば C1Calendar101 サンプルでは、C1Calendar101.XF プロジェクトに含まれる、以下の画像で赤く囲ったファイルおよびフォルダ(フォルダ内のすべてのサブフォルダおよびファイルを含む)を .NET MAUI プロジェクトにコピーします。
各ファイルのビルドアクションは、それぞれ適切なもの(埋め込みリソースなど)に変更します。xaml ファイルについては、ビルドアクションを「MauiXaml」に変更します。
元のプロジェクトのアプリケーション情報やプラットフォーム固有の構成などを .NET MAUI プロジェクトにコピーします。.NET MAUI プロジェクトにおける共通のアプリケーションマニフェストは、プロジェクトのプロパティのうち、[MAUI 共有]-[全般]にて設定します。
なお、.NET MAUI プロジェクトには Platforms フォルダが用意されており、.NET MAUI がターゲットにできるプラットフォームを示すそれぞれのサブフォルダに対して、プラットフォーム固有の設定やコードを含めることができます。元のプロジェクトにて、プラットフォーム固有のコードを追加していた場合は、それらも同様に Platforms フォルダ配下の適切な場所にコピーします。
プラットフォーム固有のデータは、それぞれ以下のように対応します。
Android では、Xamarin.Forms Android プロジェクトの「AndroidManifest.xml」ファイルから .NET MAUI プロジェクトの「Platforms\Android\AndroidManifest.xml」ファイルに追加データをコピーします。
iOS では、Xamarin.Forms iOS プロジェクトの「Info.plist」ファイルから .NET MAUI プロジェクトの「Platforms\iOS\Info.plist」ファイルに追加データをコピーします。さらに、Xamarin.Forms iOS プロジェクトの「Entitlements.plist」ファイルを .NET MAUI プロジェクトの「Platforms\iOS」フォルダーにコピーします。
Windows では、Xamarin.Forms UWP プロジェクトの「Package.appxmanifest」ファイルから .NET MAUI プロジェクトの「Platforms\Windows\Package.appxmanifest」ファイルに追加データをコピーします。
必要に応じて、アプリケーションアイコンやスプラッシュ画像などのリソースファイルもコピーします。.NET MAUI プロジェクトでは、「Resources」フォルダおよびそのサブフォルダに各種リソースファイルを配置します。
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」に変更されているので、こちらも同様に置換を行います。
なお、置き換えにあたっては、プロジェクトもしくはソリューション全体に対するテキスト置換を行うのが簡単です。
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」に変更されているので、こちらも同様に置換を行います。
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"/> |
コードの修正などを一通り終えたら、デバッグ実行して動作を確認します。移行にあたって必要な修正が適切に行われていれば、以前と同様にアプリが実行されます。デスクトップアプリについては、Xamarin の UWP から .NET MAUI の WinUI に切り替わります。