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

На этой странице содержатся некоторые советы по созданию пакетов NuGet, предназначенных для платформы Xamarin.This page contains some tips to help build NuGet packages that target the Xamarin platform.

Примечание

Xamarin Studio 6,2 (и Visual Studio для Mac) включает возможность автоматического создания пакетов NuGet с помощью PCL, .NET Standard или общих проектов.Xamarin Studio 6.2 (and Visual Studio for Mac) includes the ability to automatically generate NuGet packages from PCL, .NET Standard, or Shared Projects. Дополнительные сведения см. в разделе многоплатформенные библиотеки для совместного использования кода .Refer to the Multiplatform Libraries for Code Sharing guide for more details.

Профили Xamarin пакета NuGetNuGet Package Xamarin Profiles

Веб-сайт NuGet, поддерживающий несколько версий и профилей .NET Framework , описывает поддержку различных платформ и профилей Майкрософт, но не включает имена целевых платформ, используемых Xamarin.The NuGet website's Supporting Multiple .NET Framework Versions and Profiles discusses how to support different Microsoft frameworks and profiles but does not include the target framework names used by Xamarin.

Основные целевые платформы Xamarin, используемые сегодня:The main Xamarin target frameworks in use today are:

  • Для Android — Xamarin. AndroidMonoAndroid - Xamarin.Android
  • Xamarin. iOSUnified API Xamarin. iOS (поддерживает 64-разрядный)Xamarin.iOS - Xamarin.iOS Unified API (supports 64-bit)
  • Xamarin. Mac — профиль мобильного устройства Xamarin. Mac, эквивалентный поверхности API Xamarin. iOS и Xamarin. Android.Xamarin.Mac - Xamarin.Mac's mobile profile, which is equivalent to the Xamarin.iOS and Xamarin.Android API surface.

Существует также целевой объект для более старых Classic APIiOS:There is also a target for the older iOS Classic API:

  • Classic API iOS с поддержкой технологии TouchMonoTouch - iOS Classic API

Nuspec -файл, предназначенный для всех, будет выглядеть следующим образом:A .nuspec file that targeted all these would look something like:

<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>

Приведенный выше параметр игнорирует все переносимые библиотеки классов.The above ignores any portable class libraries.

Большинство файлов . nuspec указывают номер версии целевой платформы, но это необязательно, если сборка работает со всеми версиями этой целевой платформы.Most .nuspec files specify the version number of the target framework but it is optional if your assembly works with all versions of that target framework. Таким образом, если целевой объект был либ\моноандроид , это означает, что он работает с любой версией Xamarin. Android.So if your target was lib\MonoAndroid this would mean it works with any version of Xamarin.Android.

Можно указать версию с набором чисел без десятичной запятой или указать ее с помощью десятичных разделителей.You can specify the version with a set of numbers without a decimal point or you can specify it using decimal points. Без десятичной запятой NuGet просто принимает каждое число и преобразует его в версию, вставляя символ "." между каждой цифрой.Without the decimal point NuGet will just take each number and turn it into a version by inserting a '.' between each digit.

В приведенном выше "MonoAndroid10" означает "Android 1,0".In the above "MonoAndroid10" means "Android 1.0". Это означает, что Целевая платформа проекта должна иметь версию Android 1,0 или более позднюю.This just means the project's target framework needs to be MonoAndroid version 1.0 or higher. Версия указывается в <TargetFrameworkVersion> элементе в файле проекта.The version is specified in the <TargetFrameworkVersion> element in the project file.

Для уточнения:To clarify:

  • MonoAndroid403 соответствует Android 4.0.3 и более поздней версии (уровень API IE 15)MonoAndroid403 matches Android 4.0.3 and newer (ie API level 15)
  • Xamarin. iOS10 соответствует Xamarin. iOS 1,0 и более поздним версиямXamarin.iOS10 matches Xamarin.iOS 1.0 and newer
  • Xamarin. iOS 1.0 также соответствует Xamarin. iOS 1,0 и более поздним версиямXamarin.iOS1.0 also matches Xamarin.iOS 1.0 and newer

PCL NuGet с зависимостями платформыPCL NuGets with Platform Dependencies

Профили PCL ограничены тем, какие API-интерфейсы .NET Framework имеют доступ, и, конечно, не могут получить доступ к коду, зависящему от платформы.PCL Profiles are limited in what .NET framework APIs they can access, and they certainly can't access platform-specific code. Эти сторонние ссылки обсуждают различные подходы к созданию пакетов NuGet, использующих PCL и собственные API для обеспечения совместимости с Xamarin и другими платформами:These 3rd-party links discuss different approaches for creating NuGet packages that use PCL and native APIs to provide compatibility for Xamarin and other platforms:

Этот внешний список профилей PCL с именем целевого объекта NuGet также является полезной ссылкой.This external list of PCL Profiles with their NuGet target name is also a useful reference.

ПримерыExamples

Некоторые примеры с открытым кодом, на которые можно ссылаться:Some open-source examples that you can refer to:

  • Модернхттпклиент — напишите свое приложение с помощью System .NET. http, но удалите эту библиотеку в, и она будет работать значительно быстрее (Просмотр исходного кода).ModernHttpClient – Write your app using System.Net.Http, but drop this library in and it will go drastically faster (view source).
  • Со звездочкой — Библиотека, позволяющая выполнять операции между различными платформами (Просмотр исходного кода).Splat – A library to make things cross-platform that should be (view source).
  • Нграфикс — межплатформенная библиотека для отрисовки векторной графики на платформе .NET (Просмотр исходного кода).NGraphics - A cross platform library for rendering vector graphics on .NET (view source).