Visual Studio 2015中共享项目和类库的区别是什么?

我在看Visual Studio 2015和共享项目的新功能,但我不明白它与使用类库或可移植类库有什么不同。有人能解释一下吗?

编辑:共享项目是Visual Studio 2015的一个新特性,与可移植类库不同。我知道什么是可移植类库。我试图理解的是共享项目与类库的不同之处。请看下面的链接。

http://www.c-sharpcorner.com/UploadFile/7ca517/shared-project-an-impressive-features-of-visual-studio-201/

121513 次浏览

共享项目和类库之间的区别在于后者是编译的,而重用的单元是程序集。

而对于前者,重用的单元是源代码,共享代码被合并到引用共享项目的每个程序集中。

当你想要创建针对具体的平台的独立程序集,但仍然有应该共享的代码时,这可能很有用。

另见在这里:

共享项目引用显示在解决方案资源管理器中的References节点下,但是共享项目中的代码和资产被视为链接到主项目的文件。


在以前版本的Visual Studio1中,您可以通过Add -> Existing Item在项目之间共享源代码,然后选择链接。但这有点笨拙,每个单独的源文件都必须单独选择。为了支持多个不同的平台(iOS、Android等),他们决定通过添加共享项目的概念,使项目之间更容易共享源代码。


1这个问题和我的回答(到目前为止)表明共享项目是Visual Studio 2015的新功能。事实上,他们在Visual Studio 2013更新2中首次亮相

我从这个博客找到了更多的信息。

  • 在类库中,当编译代码时,会为每个库生成程序集(dll)。但是对于共享项目,它将不包含任何头信息,因此当你有一个共享项目引用时,它将被编译为父应用程序的一部分。不会创建单独的dll。
  • 在类库中,你只允许写c#代码,而共享项目可以有c#代码文件,XAML文件或JavaScript文件等任何东西。

从书VS 2015简洁

共享项目允许跨多个项目类型共享代码、资产和资源。更具体地说,以下项目类型可以引用和使用共享项目:

  • 控制台、Windows窗体和Windows表示基础。
  • Windows Store 8.1应用和Windows Phone 8.1应用。
  • Windows Phone 8.0/8.1 Silverlight应用程序。
  • 可移植类库。

注意:共享项目和可移植类库(PCL)都允许共享代码、XAML资源和资产,但当然也有一些区别,可以总结如下。

  • 共享项目不会产生可重用程序集,因此只能从解决方案内部使用该程序集。
  • 共享项目支持特定于平台的代码,因为它支持诸如WINDOWS_PHONE_APP和WINDOWS_APP这样的环境变量,您可以使用这些变量来检测您的代码运行在哪个平台上。
  • 最后,共享项目不能依赖于第三方库。
  • 相比之下,PCL生成一个可重用的.dll库,并且可以依赖于第三方库,但它不支持平台环境变量

就像其他人已经写的那样,简而言之:

< p > 共享项目 < br > 在代码(文件)级别重用,允许文件夹结构和资源

< p > pcl < br > 在程序集级别上重用

对我来说,这里的答案中最缺少的是关于PCL中可用的减少功能的信息:作为一个例子,你有有限的文件操作(我缺少了很多文件。Xamarin跨平台项目中的IO功能)。

更多详细信息
共享项目: < br > +可以使用#if当针对多个平台(例如Xamarin iOS, Android, WinPhone)
+每个目标项目可用的所有框架功能(尽管必须有条件地编译)
o在编译时集成
-结果程序集的大小略大
-需要Visual Studio 2013更新2或更高版本

< p > pcl: < br > +生成共享程序集
+可用于较旧版本的Visual Studio(2013年更新2之前)
O动态链接
-有限的功能(它被引用的所有项目的子集)

如果你可以选择,我会建议你选择共享项目,它通常更灵活、更强大。如果您提前知道您的需求,并且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/ < a href = " http://hotkrossbits.com/2015/05/03/xamarin-forms-pcl-vs-shared-project/ " > < / >

类库是共享编译代码。

共享项目是共享源代码。