次の方法で共有


Xamarin.Mac 用のターゲット フレームワーク

この記事では、Xamarin.Mac で使用できるターゲット フレームワーク (基底クラス ライブラリ) と、Xamarin.Mac プロジェクトで使用することの影響について説明します。

Target framework options for Xamarin.Mac

背景

すべての .NET プログラムまたはライブラリは、基底クラス ライブラリ (BCL) によって提供される機能に依存します。 この BCL には、すべての .NET 言語に組み込まれている共通機能を提供する mscorlib、System、System.Net.Http、System.Xml などのアセンブリが含まれています。

長年にわたり、この BCL の複数の異なるバージョンを開発し、さまざまなユース ケースに最適化してきました。 “デスクトップ” BCL には、他のユース ケースでは負荷が高すぎる可能性があるライブラリの豊富なセットが含まれていますが、モバイルでは、API がリンクに安全であることを確認することに重点を置いています。これにより、アプリケーションのフットプリントを削減するために未使用のコードが削除されます。

これらの異なるターゲット フレームワークのより重要な反論の 1 つは、特定のプログラム内のすべてのアセンブリが、ターゲット互換性のある BCL アセンブリである必要があるということです。 そうでない場合は、異なるバージョンの System.dll に対して 2 つのアセンブリをリンクし、特定の型のシグネチャについて意見が一致しない可能性があります。 共有ライブラリは、ターゲット フレームワークの共通のサブセットである .NET Standard 2または特定のターゲット フレームワークをターゲットにすることができます。

Xamarin.Mac には 3 つのターゲット フレームワーク オプションがあり、それぞれに異なる利点とトレードオフがあります:

  • モダン (古いドキュメントでは Mobile と呼ばれます) – Xamarin.iOS の機能に非常によく似たサブセットで、パフォーマンスとサイズに合わせて高度に調整されています。 このターゲット フレームワークはリンカー セーフであるため、これらのプロジェクトでは、未使用のコードを削除することで最終的な占有領域を大幅に削減できます。

  • 完全 (以前のドキュメントでは XM 4.5 と呼ばれます) – "デスクトップ" BCL とよく似たサブセットで、いくつかの小さな削除が行われます。 ターゲット フレームワークは net45 (以降) とほぼ同じであるため、netstandard2 または特定の Xamarin.Mac ビルドを提供しない多数の nuget を簡単に使用できます。 ただし、System.Configuration の使用により、リンクと互換性がありません。

  • サポートされていません (以前のドキュメントでは System と呼ばれます) – Xamarin.Mac によって提供される BCL にリンクする代わりに、現在インストールされているシステムの mono を使用します。 これにより、問題であることが知られているアセンブリ (System.Drawing など) を含む、アセンブリの完全なセットを提供します。 このオプションは "最後の手段" のみを持ち、使用する前に他のオプションを全て使用することを強くお勧めします。 名前が示すように、公式のサポート チャネルでは使用はサポートされていません。

ターゲット フレームワークの設定

Xamarin.Mac プロジェクトのターゲット フレームワークの種類に変更するには、次の操作を行います:

  1. Visual Studio for Mac で Xamarin.Mac プロジェクトを開きます。

  2. ソリューション エクスプローラーで、プロジェクト ファイルをダブルクリックし、[プロジェクト オプション] ダイアログ ボックスを開きます。

  3. [全般] タブで、アプリケーションのニーズに合ったターゲット フレームワークの種類を選択します:

    Using the Project Options window to choose a target framework

  4. [OK] をクリックして変更内容を保存します。

ターゲット フレームワークの種類を切り替えた後、Xamarin.Mac プロジェクトをクリーンしてからリビルドする必要があります。

まとめ

この記事では、Xamarin.Mac アプリケーションで使用できるさまざまな種類のターゲット フレームワーク (基底クラス ライブラリ) と、各種類のフレームワークを使用するタイミングについて簡単に説明しました。