What is the difference between a Shared Project and a Class Library in Visual Studio 2015?
我在查看Visual Studio 2015的新功能,并发现了很多共享项目,但我不明白使用类库或便携式类库有什么不同。有人能解释吗?
编辑:共享项目是Visual Studio 2015中的一项新功能,与便携式类库不同。我知道什么是便携式类库。我试图理解的是共享项目与类库的区别。参见下面的链接。
http://www.c-sharpcorner.com/uploadfile/7ca517/shared-project-an-improvant-features-of-visual-studio-201/
共享项目和类库的区别在于后者是编译的,重用单元是程序集。
而对于前者,重用单元是源代码,共享代码被合并到引用共享项目的每个程序集中。
当您希望创建针对特定平台但仍有应共享的代码的单独程序集时,这可能很有用。
这里也可以看到:
The shared project reference shows up under the References node in the Solution Explorer, but the code and assets in the shared project are treated as if they were files linked into the main project.
在Visual Studio1的早期版本中,可以通过添加->现有项,然后选择链接,在项目之间共享源代码。但这有点笨拙,每个单独的源文件都必须单独选择。随着对多个不同平台(iOS、Android等)的支持,他们决定通过添加共享项目的概念来更容易地在项目之间共享源代码。
1这个问题和我的回答(到目前为止)表明共享项目是Visual Studio 2015中的一个新功能。事实上,他们在Visual Studio 2013更新2中首次亮相
我从这个博客中找到了更多的信息。
- 在类库中,编译代码时,会为每个库生成程序集(DLL)。但是对于共享项目,它将不包含任何头信息,因此当您有一个共享项目引用时,它将作为父应用程序的一部分进行编译。不会创建单独的DLL。
- 在类库中,只允许编写C代码,而共享项目可以包含C代码文件、XAML文件或JavaScript文件等任何内容。
简言之,区别在于
1)PCL将无法完全访问.NET Framework,而SharedProject将访问.NET Framework。
2)特定于平台的代码的ifdef-您不能在pcl中写入(ifdef选项在pcl中不可用,因为它是作为自己的dll单独编译的,所以在编译时(当对ifdef进行评估时),它不知道它将是哪个平台的一部分。)作为共享项目,您可以。
3)特定于平台的代码是使用PCL中的控制反转来实现的,在使用ifdef语句时,可以在共享项目中实现相同的控制反转。
下面的链接可以找到一篇优秀的文章,说明PCL与共享项目之间的区别
http://hotkrossbits.com/2015/05/03/xamarin-forms-pcl-vs-shared-project/
就像其他人已经写的,简而言之:
共享项目在代码(文件)级别上重用,同时允许文件夹结构和资源
多氯联苯在程序集级别上重用
对于我来说,这里的答案中最缺少的是关于PCL中可用的简化功能的信息:例如,您的文件操作有限(我在Xamarin跨平台项目中缺少很多file.io功能)。
更详细地共享项目:+当针对多个平台(例如Xamarin iOS、Android、WinPhone)时,可以使用if+每个目标项目可用的所有框架功能(尽管必须有条件地编译)o在编译时集成-结果组件的尺寸稍大-需要Visual Studio 2013更新2或更高版本
PCL:+生成共享程序集+可用于旧版本的Visual Studio(2013年以前的更新2)o动态链接-限定功能(它所引用的所有项目的子集)
如果您有选择的话,我建议您选择共享项目,它通常更加灵活和强大。如果您提前知道您的需求,并且PCL能够满足这些需求,那么您也可以走这条路。PCL还通过不允许您编写特定于平台的代码来加强更清晰的分离(首先,这可能不是将其放入共享程序集中的好选择)。
这两者的主要焦点是当您面向多个平台时,否则通常只使用一个普通的库/dll项目。
简明扼要地从书中对比2015年
共享项目允许跨多个项目类型共享代码、资产和资源。更具体地说,以下项目类型可以引用和使用共享项目:
- 控制台、Windows窗体和Windows演示文稿基础。
- Windows Store 8.1应用程序和Windows Phone 8.1应用程序。
- Windows Phone 8.0/8.1 Silverlight应用程序。
- 可移植类库。
注意:共享项目和可移植类库(PCL)都允许共享代码、XAML资源和资产,但当然,它们之间存在一些差异,可以概括如下。
- 共享项目不生成可重用的程序集,因此只能从解决方案中使用它。
- 共享项目支持特定于平台的代码,因为它支持诸如Windows Phone和Windows应用程序等环境变量,您可以使用这些变量检测代码运行在哪个平台上。
- 最后,共享项目不能依赖于第三方库。
- 相比之下,PCL生成一个可重用的.dll库,并且可以依赖于第三方库,但它不支持平台环境变量。
类库是共享的编译代码。
共享项目是共享的源代码。