手动为 Xamarin 创建 NuGet 包

本页包含一些帮助生成面向 Xamarin 平台的 NuGet 包的提示。

注意

Xamarin Studio 6.2(和 Visual Studio for Mac)包括从 PCL、.NET Standard 或共享项目自动生成 NuGet 包的功能。 有关更多详细信息, 请参阅多平台代码共享 库指南。

NuGet 包 Xamarin 配置文件

NuGet 网站的 多个 .NET Framework 版本和配置文件讨论了如何支持不同的 Microsoft 框架和配置文件 ,但不包括 Xamarin 使用的目标框架名称。

目前使用的主要 Xamarin 目标框架包括:

  • MonoAndroid - Xamarin.Android
  • Xamarin.iOS - Xamarin.iOS 统一 API (支持 64 位)
  • Xamarin.Mac - Xamarin.Mac 的移动配置文件,相当于 Xamarin.iOS 和 Xamarin.Android API 图面。

旧版 iOS 经典 API 还有一个目标:

  • MonoTouch - iOS 经典 API

面向所有这些目标的 .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 NuGet

PCL 配置文件在可以访问的 .NET Framework API 中受到限制,它们当然无法访问特定于平台的代码。 这些第三方链接讨论了创建使用 PCL 和本机 API 为 Xamarin 和其他平台提供兼容性的 NuGet 包的不同方法:

具有其 NuGet 目标名称的 PCL 配置文件的外部列表也是一个有用的参考。

示例

可以参考的一些开源示例:

  • ModernHttpClient – 使用 System.Net.Http 编写应用,但将此库拖放到其中,它将大大加快(视图 )。
  • Splat – 一个库,用于使跨平台(视图 )的东西。
  • NGraphics - 用于在 .NET 上呈现矢量图形的跨平台库(视图 )。