编辑:共享项目是Visual Studio 2015中的一个新功能,与可移植类库不同。我理解什么是可移植类库。我想要了解的是共享项目与类库之间的区别。请参见下面的链接。
共享项目和类库的区别在于后者是编译的,重用的单元是程序集。
而前者的重用单元是源代码,共享代码被合并到引用共享项目的每个程序集中。
当您想要创建针对特定平台的单独程序集但仍具有应该共享的代码时,这将非常有用。
另请参见此处:
共享项目引用显示在“解决方案资源管理器”中的“引用”节点下,但共享项目中的代码和资产被视为链接到主项目中的文件。
我从这个博客中找到了更多信息。
简而言之,它们的区别在于:
1)PCL无法完全访问.NET Framework,而SharedProject可以。
2)用于平台特定代码的#ifdef选项在PCL中不可用,因为它被单独编译为自己的DLL,所以在编译时(评估#ifdef时)它不知道它将成为哪个平台的一部分。而在共享项目中可以使用。
3)使用Inversion Of Control可以在PCL中实现特定于平台的代码,而使用#ifdef语句可以在共享项目中实现相同的功能。
以下链接有一篇很好地阐述了PCL与Shared Project之间的区别的文章:
http://hotkrossbits.com/2015/05/03/xamarin-forms-pcl-vs-shared-project/
像其他人已经写过的一样,简而言之:
共享项目
在代码(文件)级别上进行重用,允许使用文件夹结构和资源
pcl
在程序集级别上进行重用
对我来说这里大多数答案缺少的信息是有关 PCL 中可用功能减少的信息:例如,在 Xamarin 跨平台项目中,您的文件操作受到限制(我错过了很多 File.IO 功能)。
更详细地说
共享项目:
+ 可以在针对多个平台时使用 #if(例如 Xamarin iOS、Android、WinPhone)
+ 每个目标项目都可用所有框架功能(但必须有条件编译)
o 在编译时集成
- 生成的程序集稍微大一些
- 需要 Visual Studio 2013 Update 2 或更高版本
pcl:
+ 生成共享程序集
+ 可用于较旧版本的 Visual Studio(2013 Update 2 之前的版本)
o 动态链接
- 功能有限(是被引用的所有项目的子集)
如果可以选择,我会建议选择共享项目,因为它通常更灵活、更强大。如果您事先知道自己的要求,并且 PCL 可以满足这些要求,您也可以选择该路线。PCL 还通过不允许编写特定于平台的代码(可能首先不能放入共享程序集)来强制实现更清晰的分离。
两者的主要重点是针对多个平台进行目标设置,否则通常会使用普通的库/ DLL 项目。
类库是共享的编译代码。
共享项目是共享的源代码。
共享项目允许在多个项目类型之间共享代码、资源和资产。更具体地说,以下项目类型可以引用和使用共享项目:
注意:- 共享项目和可移植类库 (PCL) 都允许共享代码、XAML 资源和资产,但它们之间有一些差异,可以总结如下: