Xamarin共享项目与便携式类库

use*_*326 27 .net mono android portable-class-library xamarin

我想弄清楚哪个是更好的方式去我们的项目.

Xamarin的PCL图书馆或共享项目.

这里Xamarin文档链接中,它说经验法则是在我们不共享库时选择共享项目.共享项目可以用#if编写,以确保它适用于多个平台 - 这也会导致一些重构#ifs无效的问题.

但我有一种直觉,认为将此代码放入共享类是不对的.如果Windows,Android和IOS移动平台可用的代码使用共享项目而不是PCL - 这意味着我们在共享项目中使用#ifs而不是在特定于平台的项目中编写特定于平台的代码.

这是试图通过#ifs支持非PCL项目,并使共享代码更复杂,更难维护.这不应该是Xamarin要改进.NET PCL代码库的工作吗?

而这也意味着我们将平台特定功能放在共享项目而不是平台特定项目中 - 即从平台项目本身隐藏特定平台的复杂性 - 这在架构方面感觉不对.

我是对的(在这种情况下,我与Xamarin文档相冲突)或者我错过了什么?

SKa*_*all 20

两者都有自己的位置.例如,您可以将接口放入PCL,然后在共享代码中实现它,如果实现具有相当数量的共享代码.

我也不喜欢编译器标志,我更喜欢使用部分类.这样您就可以避免大部分甚至全部编译器标志.Class1.cs将进入共享项目,其余的将进入他们的平台特定项目.

Class1.cs
Class1.ios.cs
Class1.android.cs
Class1.wp8.cs
Run Code Online (Sandbox Code Playgroud)


Dan*_*ted 6

他们都有自己的位置.如果您的代码完全可移植,我建议您使用PCL.如果您需要使用特定于平台的API,那么您可以使用各种技术(通常涉及为功能创建可移植的抽象)来使用PCL,但如果它是一个孤立的情况,有时只使用#if更简单.

有关优缺点的一般列表,请参阅我对PCL与链接文件的问题的答案.共享项目与链接文件类似,但没有一些工具缺点.