我需要在Xamarin中创建一个仅针对iOS和Android的库 . 我不需要支持任何其他平台,但我需要尽可能多的.NET功能 .
我看到在Change Targets对话框中无法取消选中Silverlight复选框:
我是否可以创建一个Xamarin便携式类库,仅针对iOS和Android而不支持Silverlight并支持更多.NET功能?
EDIT: 以下是我需要支持的一些类:X509CertificateCollection,SerializationInfo,NameValueCollection . 我还需要System.Web.Services名称空间支持 . 看起来我可以直接在iOS和Android项目中使用所有这些 . 我可以创建具有所有这些功能的PCL吗?
4 回答
如果您尝试定位PCL,您将受到限制,另一种选择是使用Bait-and-Switch NuGet,其设置如下:
共享项目 - 包含所有共享代码
Android库项目 - 引用共享项目,因此它获取所有代码
iOS库项目 - 引用共享项目,因此它获取所有代码
PCL项目 - 空项目,仅包含方法的空存根
然后创建一个NuGet,其中Android有效负载是Android Library项目,iOS有效负载是iOS Library项目 .
然后,PCL项目只显示与PCL兼容的API,但实现恰好使用了您需要的所有内容 .
对于诱饵和开关方法,请参阅:http://log.paulbetts.org/the-bait-and-switch-pcl-trick/
包含
Silverlight
的Profile24,包括Xamarin.iOS
和Xamarin.Android
,是你得到的最窄的仅供参考:我完全同意Matt关于使用Profile111的建议,如果您要进入PCL库方向 . 有时对于我们的项目,只需使用“共享项目”并在需要时在共享代码中使用#if /#else / #end,就会“更快”($ / time) . PCL库非常适合共享,但如果你不需要留下框架片的心痛,那么共享的项目方向今天可以解决今天的问题...... ;-)
截至Xamarin 4.1版本,增加了两个新的配置文件:
旧的:
http://danrigby.com/2014/05/14/supported-pcl-profiles-xamarin-for-visual-studio-2/
PCL配置文件(几乎)相同,包括或不包括Silverlight,您只能访问PCL程序集 .
但是,Xamarin Forms已经允许您应对这一点,在每个平台上都有.Droid和.iOS项目,在这些项目中,您可以使用完整的.net框架 .
要从这些项目中访问代码,您需要Dependency Services,如果您想为Android和iOS使用相同的代码,则需要shared projects .
基本上,将所有共享编码放在共享项目中,实现接口,将其注册为依赖服务,在Forms代码中检索它,这样您就可以获得对完整框架的支持 .
正如文本告诉你的那样,它将自动添加silverlight,因为不会削减功能 . 因此将不再有可用的功能 .
另一方面,我建议使用
Profile111
(参见SushiHangover答案中的列表) . 一方面,这允许您稍后将Windows 10添加为目标平台,并且大多数PCL似乎都支持此配置文件,因为Silverlight将会死(Silverlight 5是最后一个,Windows Phone是UWP)