Создание пакетов NuGet вручную для Xamarin

На этой странице содержатся некоторые советы по созданию пакетов NuGet, предназначенных для платформы Xamarin.

Примечание.

Xamarin Studio 6.2 (и Visual Studio для Mac) включает возможность автоматического создания пакетов NuGet из PCL, .NET Standard или общих проектов. Дополнительные сведения см. в руководстве по многоплатформным библиотекам для совместного использования кода.

Профили пакета NuGet Xamarin

Веб-сайт NuGet поддерживает несколько версий и профилей платформа .NET Framework описывает, как поддерживать различные платформы и профили Майкрософт, но не включать имена целевых платформ, используемых Xamarin.

Основными целевыми платформами Xamarin, используемыми сегодня, являются:

  • MonoAndroid - Xamarin.Android
  • Xamarin.iOS — унифицированный API Xamarin.iOS (поддерживает 64-разрядную версию)
  • Мобильный профиль Xamarin.Mac Xamarin.Mac , эквивалентный поверхности API Xamarin.iOS и Xamarin.Android.

Существует также целевой объект для более старого классического API iOS:

  • MonoTouch — классический API iOS

Nuspec-файл, предназначенный для всех этих файлов, будет выглядеть примерно так:

<files>
    <file src="Mac\bin\Release\*.dll" target="lib\Xamarin.Mac20" />
    <file src="iOS\bin\Release\*.dll" target="lib\Xamarin.iOS10" />
    <file src="Android\bin\Release\*.dll" target="lib\MonoAndroid10" />
    <file src="iOSClassic\bin\Release\*.dll" target="lib\MonoTouch10" />
</files>

Приведенные выше библиотеки классов игнорируют все переносимые библиотеки классов.

Большинство nuspec-файлов указывают номер версии целевой платформы, но необязательно, если сборка работает со всеми версиями этой целевой платформы. Таким образом, если целевой объект был lib\MonoAndroid , это означает, что он работает с любой версией Xamarin.Android.

Можно указать версию с набором чисел без десятичной запятой или указать ее с помощью десятичных точек. Без десятичной запятой NuGet будет просто принимать каждое число и превращать его в версию, вставляя ""." между каждой цифрой.

В приведенном выше "MonoAndroid10" означает "Android 1.0". Это означает, что целевая платформа проекта должна быть MonoAndroid версии 1.0 или более поздней. Версия указывается в элементе <TargetFrameworkVersion> в файле проекта.

Пояснение:

  • MonoAndroid403 соответствует Android 4.0.3 и более поздней версии (уровень API 15)
  • Xamarin.iOS10 соответствует Xamarin.iOS 1.0 и более поздней версии
  • Xamarin.iOS1.0 также соответствует Xamarin.iOS 1.0 и более поздней версии

PcL NuGets с зависимостями платформы

Профили PCL ограничены тем, к каким API платформы .NET они могут получить доступ, и они, безусловно, не могут получить доступ к коду для конкретной платформы. Эти 3-сторонние ссылки обсуждают различные подходы к созданию пакетов NuGet, использующих PCL и собственные API для обеспечения совместимости для Xamarin и других платформ:

Этот внешний список профилей PCL с именем целевого объекта NuGet также является полезной ссылкой.

Примеры

Некоторые примеры с открытым кодом, на которые можно ссылаться:

  • ModernHttpClient — напишите приложение с помощью System.Net.Http, но удалите эту библиотеку, и она будет значительно быстрее (просмотр источника).
  • Splat — библиотека для того, чтобы сделать вещи кроссплатформенными, которые должны быть (просмотр источника).
  • NGraphics — кроссплатформенная библиотека для отрисовки векторной графики в .NET (источник представления).