我在看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中首次亮相


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

在类库中,当编译代码时,会为每个库生成程序集(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资源和资产,但当然也有一些区别,可以总结如下。

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/


类库是共享的编译代码。

共享项目是共享源代码。