我能否仅使用 Xamarin PCL 定位 iOS 和 Android 并拥有更多 .NET 功能?
Can I target iOS and Android only with a Xamarin PCL and have more .NET features?
我需要在 Xamarin 中创建一个仅针对 iOS 和 Android 的库。我不需要支持任何其他平台,但我需要尽可能多的 .NET 功能。
我看到在“更改目标”对话框中无法取消选中 Silverlight 复选框:
我能否创建一个仅针对 iOS 和 Android 的 Xamarin 可移植 class 库,而无需 Silverlight 支持并支持更多 .NET 功能?
编辑: 这里有一些我需要支持的 classes:X509CertificateCollection、SerializationInfo、NameValueCollection。我还需要 System.Web.Services 名称空间支持。看起来我可以直接在 iOS 和 Android 项目中使用所有这些。我可以创建具有所有这些功能的 PCL 吗?
Profile24,其中包括 Silverlight
是您将获得的最窄的,同时包括 Xamarin.iOS
和 Xamarin.Android
仅供参考:我完全同意 Matt 关于在 PCL 库方向使用 Profile111 的建议。有时对于我们的项目,它是 "faster" ($/time) 只需使用 "Shared Projects" 并在需要时在共享代码中使用 #if/#else/#end 。 PCL 库非常适合共享,但如果您不需要留下框架碎片的心痛,共享项目方向可以解决今天的问题...;-)
从 Xamarin 4.1 版本开始,添加了两个新配置文件:
Profile 44 (.NET Framework 4.5.1, Windows 8.1) (netstandard 1.2)
Profile 151 (.NET Framework 4.5.1, Windows 8.1, Windows Phone 8.1) (netstandard 1.2)
旧的:
Profile 5 (.NET Framework 4, Windows 8)
Profile 6 (.NET Framework 4.0.3, Windows 8)
Profile 7 (.NET Framework 4.5, Windows 8)
Profile 14 (.NET Framework 4, Silverlight 5)
Profile 19 (.NET Framework 4.0.3, Silverlight 5)
Profile 24 (.NET Framework 4.5, Silverlight 5)
Profile 37 (.NET Framework 4, Silverlight 5, Windows 8)
Profile 42 (.NET Framework 4.0.3, Silverlight 5, Windows 8)
Profile 47 (.NET Framework 4.5, Silverlight 5, Windows 8)
Profile 49 (.NET Framework 4.5, Windows Phone Silverlight 8)
Profile 78 (.NET Framework 4.5, Windows 8, Windows Phone Silverlight 8)
Profile 92 (.NET Framework 4, Windows 8, Windows Phone 8.1)
Profile 102 (.NET Framework 4.0.3, Windows 8, Windows Phone 8.1)
Profile 111 (.NET Framework 4.5, Windows 8, Windows Phone 8.1)
Profile 136 (.NET Framework 4, Silverlight 5, Windows 8, Windows Phone Silverlight 8)
Profile 147 (.NET Framework 4.0.3, Silverlight 5, Windows 8, Windows Phone Silverlight 8)
Profile 158 (.NET Framework 4.5, Silverlight 5, Windows 8, Windows Phone Silverlight 8)
Profile 225 (.NET Framework 4, Silverlight 5, Windows 8, Windows Phone 8.1)
Profile 255 (.NET Framework 4.5, Silverlight 5, Windows 8, Windows Phone 8.1)
Profile 259 (.NET Framework 4.5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8)
Profile 328 (.NET Framework 4, Silverlight 5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8)
Profile 336 (.NET Framework 4.0.3, Silverlight 5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8)
Profile 344 (.NET Framework 4.5, Silverlight 5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8)
http://danrigby.com/2014/05/14/supported-pcl-profiles-xamarin-for-visual-studio-2/
PCL 配置文件(几乎)相同,包括或不包括 Silverlight,您只能访问 PCL 程序集。
但是,Xamarin Forms 已经可以让您应对这种情况,在每个平台上您都有一个 .Droid 和 .iOS 项目,并且在这些项目上您可以使用完整的 .net 框架。
要访问这些项目的代码,您需要 Dependency Services, and if you want to use the same code for both, Android and iOS you have shared projects。
所以基本上,将所有共享代码放在一个共享项目中,实现一个接口,将其注册为依赖服务,在您的表单代码中检索它,这样您将获得对完整框架的支持。
如文中所述,它会自动添加 silverlight,因为不会削减功能。因此将不再提供更多功能。
另一方面,我建议使用 Profile111
(请参阅 SushiHangover 的回答中的列表)。一方面,这允许您稍后添加 Windows 10 作为目标平台,而且大多数 PCL 似乎都支持此配置文件,因为 Silverlight 即将消亡(Silverlight 5 是最后一个,Windows Phone 是 UWP)
虽然如果您尝试以 PCL 为目标会受到限制,但另一种选择是使用 Bait-and-Switch NuGet,其设置如下:
- 共享项目 - 包含您所有的共享代码
- Android 图书馆项目 - 引用共享项目,因此它获得了所有代码
- iOS Library Project - References Shared Project,所以它得到了所有代码
- PCL 项目 - 空项目,仅包含方法的空存根
然后创建一个 NuGet,其中 Android 有效载荷是 Android 库项目,iOS 有效载荷是 iOS 库项目。
PCL 项目只显示与 PCL 兼容的 API,但实施恰好使用了您需要的一切。
诱饵转换方法见:http://log.paulbetts.org/the-bait-and-switch-pcl-trick/
我需要在 Xamarin 中创建一个仅针对 iOS 和 Android 的库。我不需要支持任何其他平台,但我需要尽可能多的 .NET 功能。
我看到在“更改目标”对话框中无法取消选中 Silverlight 复选框:
我能否创建一个仅针对 iOS 和 Android 的 Xamarin 可移植 class 库,而无需 Silverlight 支持并支持更多 .NET 功能?
编辑: 这里有一些我需要支持的 classes:X509CertificateCollection、SerializationInfo、NameValueCollection。我还需要 System.Web.Services 名称空间支持。看起来我可以直接在 iOS 和 Android 项目中使用所有这些。我可以创建具有所有这些功能的 PCL 吗?
Profile24,其中包括 Silverlight
是您将获得的最窄的,同时包括 Xamarin.iOS
和 Xamarin.Android
仅供参考:我完全同意 Matt 关于在 PCL 库方向使用 Profile111 的建议。有时对于我们的项目,它是 "faster" ($/time) 只需使用 "Shared Projects" 并在需要时在共享代码中使用 #if/#else/#end 。 PCL 库非常适合共享,但如果您不需要留下框架碎片的心痛,共享项目方向可以解决今天的问题...;-)
从 Xamarin 4.1 版本开始,添加了两个新配置文件:
Profile 44 (.NET Framework 4.5.1, Windows 8.1) (netstandard 1.2)
Profile 151 (.NET Framework 4.5.1, Windows 8.1, Windows Phone 8.1) (netstandard 1.2)
旧的:
Profile 5 (.NET Framework 4, Windows 8)
Profile 6 (.NET Framework 4.0.3, Windows 8)
Profile 7 (.NET Framework 4.5, Windows 8)
Profile 14 (.NET Framework 4, Silverlight 5)
Profile 19 (.NET Framework 4.0.3, Silverlight 5)
Profile 24 (.NET Framework 4.5, Silverlight 5)
Profile 37 (.NET Framework 4, Silverlight 5, Windows 8)
Profile 42 (.NET Framework 4.0.3, Silverlight 5, Windows 8)
Profile 47 (.NET Framework 4.5, Silverlight 5, Windows 8)
Profile 49 (.NET Framework 4.5, Windows Phone Silverlight 8)
Profile 78 (.NET Framework 4.5, Windows 8, Windows Phone Silverlight 8)
Profile 92 (.NET Framework 4, Windows 8, Windows Phone 8.1)
Profile 102 (.NET Framework 4.0.3, Windows 8, Windows Phone 8.1)
Profile 111 (.NET Framework 4.5, Windows 8, Windows Phone 8.1)
Profile 136 (.NET Framework 4, Silverlight 5, Windows 8, Windows Phone Silverlight 8)
Profile 147 (.NET Framework 4.0.3, Silverlight 5, Windows 8, Windows Phone Silverlight 8)
Profile 158 (.NET Framework 4.5, Silverlight 5, Windows 8, Windows Phone Silverlight 8)
Profile 225 (.NET Framework 4, Silverlight 5, Windows 8, Windows Phone 8.1)
Profile 255 (.NET Framework 4.5, Silverlight 5, Windows 8, Windows Phone 8.1)
Profile 259 (.NET Framework 4.5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8)
Profile 328 (.NET Framework 4, Silverlight 5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8)
Profile 336 (.NET Framework 4.0.3, Silverlight 5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8)
Profile 344 (.NET Framework 4.5, Silverlight 5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8)
http://danrigby.com/2014/05/14/supported-pcl-profiles-xamarin-for-visual-studio-2/
PCL 配置文件(几乎)相同,包括或不包括 Silverlight,您只能访问 PCL 程序集。
但是,Xamarin Forms 已经可以让您应对这种情况,在每个平台上您都有一个 .Droid 和 .iOS 项目,并且在这些项目上您可以使用完整的 .net 框架。
要访问这些项目的代码,您需要 Dependency Services, and if you want to use the same code for both, Android and iOS you have shared projects。
所以基本上,将所有共享代码放在一个共享项目中,实现一个接口,将其注册为依赖服务,在您的表单代码中检索它,这样您将获得对完整框架的支持。
如文中所述,它会自动添加 silverlight,因为不会削减功能。因此将不再提供更多功能。
另一方面,我建议使用 Profile111
(请参阅 SushiHangover 的回答中的列表)。一方面,这允许您稍后添加 Windows 10 作为目标平台,而且大多数 PCL 似乎都支持此配置文件,因为 Silverlight 即将消亡(Silverlight 5 是最后一个,Windows Phone 是 UWP)
虽然如果您尝试以 PCL 为目标会受到限制,但另一种选择是使用 Bait-and-Switch NuGet,其设置如下:
- 共享项目 - 包含您所有的共享代码
- Android 图书馆项目 - 引用共享项目,因此它获得了所有代码
- iOS Library Project - References Shared Project,所以它得到了所有代码
- PCL 项目 - 空项目,仅包含方法的空存根
然后创建一个 NuGet,其中 Android 有效载荷是 Android 库项目,iOS 有效载荷是 iOS 库项目。
PCL 项目只显示与 PCL 兼容的 API,但实施恰好使用了您需要的一切。
诱饵转换方法见:http://log.paulbetts.org/the-bait-and-switch-pcl-trick/