Xamarin 共享库和 PCL

23

Xamarin共享项目和可移植类库之间的确切区别是什么?

何时使用共享库,何时使用可移植类库?

在共享项目中编写原生功能(例如显示警报、访问相机)并将其用于Android和iOS是否可行?

能否有人给我解释一下。

1个回答

34
共享项目中,每个代码文件将为每个目标(Android、iOS、Windows Phone等)编译。您可以使用#if编译器指令包含特定于平台的代码。 当您想要访问相机时,您需要在所有目标平台的#if块内编写访问代码。这可能会弄乱您的代码,但可以更容易地找到不同的实现方式。 了解更多: http://developer.xamarin.com/guides/cross-platform/application_fundamentals/shared_projects/ 便携式类库(PCL)针对兼容所需的所有平台的一般.NET子集进行编译。因此,您可以访问System.Net.Http,但无法访问任何特定于平台的代码。如果您想在PCL代码中访问相机,则需要通过依赖注入通过通用接口访问它。有一些非常好的框架可以帮助您实现这个目标。其中最著名的之一是MVVMCross (https://github.com/MvvmCross/MvvmCross/wiki)。 了解有关PCL的更多信息:http://developer.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications/sharing_code_options/#Portable_Class_Libraries 我个人更喜欢PCLs,因为代码更易于阅读而无需任何编译器指令。使用MVVMCross,您可以通过NuGet使用许多插件。因此,您不需要编写自己的类来访问相机、显示警报等。

Wosi,您能否使用PCL实现与平台特定代码相同的相机操作? - johnny
当然可以!通过依赖注入隐藏在平台无关接口后使用特定于平台的实现来访问相机,您实际上正在从 PCL 中运行特定于平台的代码。 - Wosi
开发人员为什么不想使用PCL呢?更容易维护SAP吗?还是其他原因? - johnny
个人偏好。有时使用#ifdef实现在每个平台上略有不同的事情可能更容易。也许只是出于历史原因使用共享项目:Xamarin的稳定PCL支持直到2013年初才到达。 - Wosi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接