为什么我们需要像Nuget这样的包管理器?

时间:2012-10-21 21:02:11

标签: visual-studio nuget package-managers

我知道像NuGet这样的程序包管理器在我们想要使用第三方组件时帮助我们。

来自Nuget Codeplex页面:

  

NuGet是一个免费的开源开发人员,专注于包管理   .NET平台系统旨在简化流程   在第二阶段将第三方库合并到.NET应用程序中   发展。

     

有大量有用的第三方开源库   适用于.NET平台,但适用于那些不熟悉OSS的人   生态系统,将这些库拉入项目可能会很痛苦。

     

我们以ELMAH为例。这是一个很好的错误记录实用程序   它与其他库没有依赖关系,但仍然是一个挑战   整合到一个项目中。这些是它需要采取的步骤:

Find ELMAH
Download the correct zip package.
“Unblock” the package.
Verify its hash against the one provided by the hosting environment.
Unzip the package contents into a specific location in the solution.
Add an assembly reference to the assembly.
Update web.config with the correct settings which a developer needs to search for. 
     

这适用于没有依赖关系的库。想象一下这样做   对于NHibernate.Linq,它有多个依赖项,每个都需要   类似的步骤。我们可以做得更好!

     

NuGet将包的所有这些常见和繁琐的任务自动化为   以及它的依赖性。它消除了几乎所有的挑战   将第三方开源库合并到一个项目中   源树

这些步骤是我们在设置项目时所做的简单任务。它仅用于自动添加第三方组件并降低配置文件中出现错误的可能性?或者它有更多的责任!

2 个答案:

答案 0 :(得分:17)

它的价值隐藏在开放中:NuGet等软件包 manager 可帮助您使用自动化处理软件依赖性。许多人假设它仅适用于开源或第三方组件,但您也可以将它用于您自己的内部包。

关于NuGet的好处是(仅列举一些好处):

  • NuGet鼓励重用组件,因为你隐含地依赖于实际的“发布”(即使是预发布),而不是分支源
  • 您可以摆脱膨胀VCS存储库的二进制文件(程序包还原功能)
  • 它会强制包创建者考虑包的使用方式,并让他们在包安装过程中处理组件的配置(谁知道如何配置包而不是包创建者?)。以ELMAH为例。
  • 有效地自动化包创建和在包存储库上发布是一种持续交付(对于软件组件)。 OctopusDeploy甚至更进一步,可以打包整个网站,以便进行部署。
  • NuGet鼓励并有时强制您遵循一些ALM最佳实践。例如。一个软件包有一个版本,所以你必须考虑你的版本控制策略(例如SemVer.org)
  • NuGet与SymbolSource.org集成(它还有一个社区版本来设置你自己的版本):这使得人们可以轻松调试已发布的软件包而无需一直发送此信息
  • 拥有一个或多个软件包存储库,使组织可以轻松维护依赖关系矩阵,甚至可以构建多个项目正在使用的OSS许可证清单
  • NuGet会通知您有关可用的软件包更新的信息
  • 创建包使人们可以考虑组件架构(所有依赖关系也应该打包)
  • 自动解决包的依赖关系(所以你不能忘记任何)
  • NuGet非常聪明,可以在需要时添加程序集绑定重定向

以上列表并非详尽无遗,但我希望我已经涵盖了这个答案的主要好处。我相信还有更多。

干杯, 泽维尔

答案 1 :(得分:3)

使用 NuGet 的原因是您不必运送项目中的所有库,从而减少项目规模。使用NuGet Power Tools,通过在 Packages.config 文件中指定软件包版本,您可以在第一次运行项目时下载所有必需的库。

  

实时演示:项目部署时缩小项目规模很重要。如果解决方案就好   拥有500Mb的代码和200Mb的封装尺寸,真正的额外200mb   每次上传项目的成本。而不是上传具体   dll文件我们需要在packages.config文件中设置它们的引用。