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


240

我一直在查看Visual Studio 2015的新功能,并且Shared Project出现了很多,但是我不明白它与使用类库或可移植类库有何不同。谁能解释?

编辑:共享项目是Visual Studio 2015中的一项新功能,与可移植类库不同。我了解什么是可移植类库。我想了解的是共享项目与类库的不同之处。请参阅下面的链接。

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


Answers:


238

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

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

当您要创建针对特定平台但仍具有应共享代码的单独程序集时,此功能很有用。

也可以在这里查看

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


在Visual Studio 1的早期版本中,您可以通过添加->现有项,然后选择链接来在项目之间共享源代码。但这有点笨拙,每个单独的源文件都必须单独选择。随着支持多种不同平台(iOS,Android等)的发展,他们决定通过添加共享项目的概念来简化项目之间的源共享。


1这个问题和我的答案(到现在为止)表明“共享项目”是Visual Studio 2015中的一项新功能。实际上,它们在Visual Studio 2013 Update 2中首次亮相。


1
假设有两个引用相同共享项目的项目。如果其中一个添加了对另一个的引用,您会得到重复的类型声明错误吗?
Asad Saeeduddin 2015年

3
@Asad-我尚未检查,但我希望不会。您可以具有两个不同的类型,它们具有相同的名称,并且在相同的名称空间中声明,但是存在于不同的程序集中。本质上,这不是一个错误。
Damien_The_Unbeliever

我在2017年有一个与OP完全相同的问题,但由于我们现在有了.net standard 2.0。现在共享项目不是过时了吗?如果您今天要创建一个全新的webapp或uwp应用程序?
JP赫勒蒙斯

1
@JPHellemons-.net标准很好-但是如果出于任何原因(例如,仅在特定平台上才有功能)都需要超出此标准,则共享项目可能仍然是一种不错的方法。
Damien_The_Unbeliever

1
我们说,通过共享项目,我们可以共享Javascript文件。我们如何在bundleConfig中使用它?
Leth

34

我从该博客中找到了更多信息。

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

7
一个类库也可以具有.xaml(用户控件)
默认

21

短内差异是

1)PCL将不具有对SharedProject拥有的.NET Framework的完全访问权限。

2)#ifdef用于平台特定的代码-您不能用PCL编写(#ifdef选项在PCL 中不可用,因为它是作为其自己的DLL单独编译的,因此在编译时(在评估#ifdef时)它不知道它将成为哪个平台的一部分。)您可以在哪里共享项目。

3)特定于平台的代码是使用PCL中的Inversion of Control实现的,与使用#ifdef语句一样,您可以在Shared Project中实现相同的功能。

可以在以下链接中找到一篇出色的文章,说明PCL与共享项目之间的差异

http://hotkrossbits.com/2015/05/03/xamarin-forms-pcl-vs-shared-project/


18

简而言之,就像其他人已经写道:


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


组装级别的pcl重用

对于我来说,答案中最缺少的是PCL中可用功能减少的信息:例如,您的文件操作有限(我在Xamarin跨平台项目中缺少许多File.IO功能)。

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

pcl
+生成共享程序集
+可与旧版本的Visual Studio(2013年之前的更新2)一起使用
o动态链接
-受限的功能(所引用的所有项目的子集)

如果您有选择,我建议您进行共享项目,它通常更灵活,功能更强大。如果您事先知道自己的要求,并且PCL可以满足要求,那么您也可以采用这种方法。PCL还通过不允许您编写特定于平台的代码(一开始放置到共享程序集中不是一个好的选择)来强制执行更清晰的分隔。

两者的主要焦点是针对多个平台时,否则通常只使用普通的库/ dll项目。


9

摘自《VS 2015》

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

  • 控制台,Windows窗体和Windows Presentation Foundation。
  • Windows Store 8.1应用程序和Windows Phone 8.1应用程序。
  • Windows Phone 8.0 / 8.1 Silverlight应用程序。
  • 便携式类库。

注意:-共享项目和可移植类库(PCL)都允许共享代码,XAML资源和资产,但是当然存在一些差异,可以总结如下。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.