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

我正在查看Visual Studio 2015的新function,并且共享项目出现了很多,但是我不明白它与使用类库或可移植类库有什么不同。 谁能解释一下?

编辑:共享项目是Visual Studio 2015中的一项新function,与便携式类库不同。 我明白什么是便携式类库。 我想了解的是共享项目与类库的不同之处。 见下面的链接。

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

共享项目和类库的区别在于后者是编译的,重用的单元是汇编。

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

当您想要创build单独的程序集来定位特定的平台,但仍然有共享的代码时,这会很有用。

另见这里 :

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


在以前版本的Visual Studio 1中 ,可以通过添加 – >现有项目共享项目之间的源代码,然后select链接。 但是,这是一种笨重的,每个单独的源文件必须单独select。 随着移动到支持多个不同的平台(iOS,Android等),他们决定通过增加共享项目的概念,使项目之间共享源代码变得更加容易。


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

我发现这个博客更多的信息。

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

短暂的差异是

1)PCL不会有完全访问.NET Framework,其中SharedProject有。

2)#ifdef针对特定平台的代码 – 不能在PCL中编写( #ifdef选项在PCL 中不可用,因为它是单独编译的,因为它是自己的DLL,因此在编译时(当评估#ifdef时)它不知道它将是什么平台的一部分。 )作为共享项目,你可以。

3)使用PCL中的Inversion Of Control实现平台特定的代码,使用#ifdef语句可以在共享项目中实现相同的function。

一个很好的文章,说明PCL vs共享项目之间的差异可以在下面的链接find

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

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

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

PCL
在组件级重用

这里给我的答案大部分都是关于PCL中可用function减less的信息:例如,您的文件操作有限(在Xamarin跨平台项目中,我错过了很多File.IOfunction)。

更详细地说
共享项目
+可以使用#if当针对多个平台(例如Xamarin iOS,Android,WinPhone)
+为每个目标项目提供的所有框架function(尽pipe必须有条件编译)
o在编译时集成
– 稍微大一点的结果集
– 需要Visual Studio 2013 Update 2或更高版本

pcl
+生成共享程序集
+可用于旧版本的Visual Studio(2013之前更新2)
odynamic链接
– 提供的function(它被引用的所有项目的子集)

如果您有select,我会build议去共享项目,它通常更灵活,更强大。 如果您事先知道您的要求,并且PCL可以实现这些要求,那么您也可以使用该路线。 PCL还通过不允许编写特定于平台的代码(这可能不是一个放在共享程序集中的好select)来实现更清晰的分离。

两者的主要重点是当你的目标是多个平台,否则你通常只使用一个普通的图书馆/ DLL项目。

从书中VS 2015成功

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

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

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

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