繁体   English   中英

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

[英]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-impressive-features-of-visual-studio-201/

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

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

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

另见此处

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


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


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

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

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

短期差异是

1) PCL 不会像 SharedProject 那样拥有对 .NET Framework 的完全访问权限。

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

3) 平台特定代码是在 PCL 中使用 Inversion Of Control 实现的,而在使用 #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 Update 2 或更高版本

个人电脑
+ 生成共享程序集
+ 可用于旧版本的 Visual Studio(2013 年更新 2 之前)
o 动态链接
- 有限的功能(它被引用的所有项目的子集)

如果你有选择,我建议你去共享项目,它通常更灵活,更强大。 如果您提前知道您的要求并且 PCL 可以满足这些要求,那么您也可以走这条路。 PCL 还通过不允许您编写特定于平台的代码(首先将其放入共享程序集可能不是一个好的选择)来强制执行更清晰的分离。

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

摘自书VS 2015

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

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

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

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

类库是共享的编译代码。

共享项目是共享源代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM