我在看Visual Studio 2015和共享项目的新功能,但我不明白它与使用类库或可移植类库有什么不同。有人能解释一下吗?
编辑:共享项目是Visual Studio 2015的一个新功能,与可移植类库不同。我知道什么是可移植类库。我试图理解的是共享项目与类库的不同之处。请看下面的链接。
http://www.c-sharpcorner.com/UploadFile/7ca517/shared-project-an-impressive-features-of-visual-studio-201/
共享项目和类库之间的区别在于后者是编译的,而重用的单元是程序集。
而对于前者,重用的单元是源代码,共享代码被合并到引用共享项目的每个程序集中。
当您想要创建针对特定平台的独立程序集,但仍然有应该共享的代码时,这可能很有用。
另见此处:
共享项目引用显示在解决方案资源管理器中的References节点下,但是共享项目中的代码和资产被视为链接到主项目的文件。
在以前版本的Visual Studio1中,您可以通过Add -> Existing Item在项目之间共享源代码,然后选择链接。但这有点笨拙,每个单独的源文件都必须单独选择。为了支持多个不同的平台(iOS、Android等),他们决定通过添加共享项目的概念,使项目之间更容易共享源代码。
1这个问题和我的回答(到目前为止)表明共享项目是Visual Studio 2015的一个新特性。事实上,它们在Visual Studio 2013 Update 2中首次亮相
摘自《VS 2015》一书
共享项目允许跨多个项目类型共享代码、资产和资源。更具体地说,以下项目类型可以引用和使用共享项目:
控制台、Windows窗体和Windows表示基础。
Windows Store 8.1应用和Windows Phone 8.1应用。
Windows Phone 8.0/8.1 Silverlight应用程序。
可移植类库。
注意:共享项目和可移植类库(PCL)都允许共享代码、XAML资源和资产,但当然也有一些区别,可以总结如下。
A shared project does not produce a reusable assembly, so it can only be consumed from within the solution.
A shared project has support for platform-specific code, because it supports environment variables such as WINDOWS_PHONE_APP and WINDOWS_APP that you can use to detect which platform your code is running on.
Finally, shared projects cannot have dependencies on third-party libraries.
By comparison, a PCL produces a reusable .dll library and can have dependencies on third-party libraries, but it does not support platform environment variables
就像其他人已经写的那样,简而言之:
共享项目
在代码(文件)级别上重用,同时考虑文件夹结构和资源
pcl
在程序集级别上重用
对我来说,这里的答案中最缺少的是关于PCL中可用的减少功能的信息:作为一个例子,你有有限的文件操作(我缺少了很多文件。Xamarin跨平台项目中的IO功能)。
更详细地讲
共享的项目:
+针对多个平台(如Xamarin iOS, Android, WinPhone)可以使用#if
+每个目标项目可用的所有框架功能(尽管必须有条件地编译)
o在编译时集成
-产生的组件尺寸略大
-需要Visual Studio 2013更新2或更高
pcl:
+生成共享程序集
+可用于旧版本的Visual Studio(2013年之前更新2)
动态链接
有限的功能(所有被引用项目的子集)
如果你可以选择,我会建议你选择共享项目,它通常更灵活、更强大。如果您提前知道您的需求,并且PCL可以满足它们,那么您也可以走这条路。PCL还通过不允许您编写特定于平台的代码(首先将其放入共享程序集中可能不是一个好的选择)来实现更清晰的分离。
两者的主要焦点是当你针对多个平台时,否则你通常只会使用一个普通的库/dll项目。
简而言之,差异是
1) PCL不会拥有。net框架的完全访问权,而SharedProject拥有。
2) #ifdef用于特定平台的代码-你不能在PCL中编写(#ifdef选项在PCL中不可用,因为它是单独编译的,作为它自己的DLL,所以在编译时(当#ifdef被计算时)它不知道它将属于哪个平台。)共享项目。
3)在PCL中使用反转控制实现特定平台的代码,在共享项目中使用#ifdef语句可以实现相同的效果。
一篇阐述PCL与共享项目之间区别的优秀文章可以在以下链接中找到
http://hotkrossbits.com/2015/05/03/xamarin-forms-pcl-vs-shared-project/