首页 文章

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

提问于
浏览
204

我正在研究Visual Studio 2015和共享项目的新功能,但我不明白它与使用类库或可移植类库有何不同 . 谁有人解释一下?

Edit: 共享项目是Visual Studio 2015中的一项新功能,与便携式类库不同 . 我理解可移植类库是什么 . 我想要了解的是共享项目与类库的区别 . 见下面的链接 .

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

5 回答

  • 27

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

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

    当您想要创建面向特定平台但仍具有应共享代码的单独程序集时,这可能很有用 .

    另见here

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


    在以前版本的Visual Studio1中,您可以通过添加 - >现有项目然后选择链接来共享项目之间的源代码 . 但这有点笨重,每个单独的源文件都必须单独选择 . 随着支持多个不同平台(iOS,Android等),他们决定通过添加共享项目的概念,更容易在项目之间共享源代码 .


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

  • 206

    我从blog找到了更多信息 .

    • 在类库中,编译代码时,会为每个库生成程序集(dll) . 但是对于共享项目,它将不包含任何标头信息,因此当您有共享项目引用时,它将被编译为父应用程序的一部分 . 不会创建单独的dll .

    • 在类库中,只允许编写C#代码,而共享项目可以包含C#代码文件,XAML文件或JavaScript文件等 .

  • 18

    短暂的差异是

    1)PCL不具有.NET Framework的完全访问权限,而ShareProject具有 .

    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/

  • 13

    像其他人已经写过的那样简而言之:

    shared project
    重用代码(文件)级别,允许文件夹结构和资源

    pcl
    在组装级别重用

    这里的答案大部分都缺少的是PCL中可用功能减少的信息:例如,您的文件操作有限(我在Xamarin跨平台项目中缺少很多File.IO功能) .

    更详细
    shared project
    在定位多个平台时可以使用#if(例如Xamarin iOS,Android,WinPhone)
    可用于每个目标项目的所有框架功能(但必须有条件地编译)
    o在编译时集成

    • 结果组件的尺寸略大
    • 需要Visual Studio 2013 Update 2或更高版本

    pcl
    生成共享程序集
    可用于旧版Visual Studio(2013年前更新2)
    o动态链接

    • lmited功能(被引用的所有项目的子集)

    如果您有选择,我建议您选择共享项目,它通常更灵活,更强大 . 如果您事先了解自己的要求并且PCL可以实现这些要求,那么您也可以采用这种方式 . PCL还通过不允许您编写特定于平台的代码(这可能不是首先放入共享程序集中的不错选择)来实现更清晰的分离 .

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

  • 7

    从书VS 2015 succintly

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

    • 控制台,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库并且可以依赖第三方库,但它不支持平台环境变量

相关问题