2012-10-21 91 views
6

我知道像NuGet这样的包管理器可以帮助我们,当我们想使用第三方组件时。为什么我们需要像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自动为包中的所有这些常见的和繁琐的任务 以及它的依赖。它消除了几乎所有的 结合第三方的开源库到项目的 源代码树的挑战

这些步骤是当我们要建立一个项目,我们做简单的任务。它仅适用于自动添加第三方组件并判定配置文件中出现错误的机会?或者它有更多的责任!

+0

我不确定你在问什么,你是否期待它做别的事情? – Betty

+0

我认为Nuget想要解决的问题并不是什么大问题!在某些情况下,它会增加团队工作的复杂程度,特别是在处理初级程序员时。 – Navid

+0

你需要它,因为它可以做所有这些事情..? – Patrick

回答

17

它的价值隐藏在公开:一个包经理如NuGet可以帮助您处理使用自动化的软件依赖关系。许多人认为它只适用于开源或第三方组件,但您也可以将它用于自己的内部软件包。

有关的NuGet伟大的事情是(仅举几例利益):

  • 的NuGet鼓励组件的重用,因为你毫无保留地依赖实际的“版本”(即使发行前),而不是分支源
  • 你可以摆脱二进制腹胀您的VCS存储库(包还原功能)
  • 它迫使包创作者思考的包将被消耗的方式,使他们包安装过程中与部件的构成处理(谁知道如何配置软件包,而不是软件包创建者?)。以ELMAH为例。
  • 上的包库自动包创建和发布实际上是连续递送(用于软件组件)的形式。 OctopusDeploy甚至更进一步,使整个网站能够打包整个部署。
  • 的NuGet鼓励,有时强制你遵循一些ALM最佳实践。例如。一个软件包有一个版本,所以你必须考虑你的版本策略(例如SemVer。ORG)
  • 的NuGet与SymbolSource.org(其中也有一个社区版来建立自己的)集成:这允许一个轻松地调试发布的程序包,而无需运送这些信息都具有一个或多个包时
  • 库很容易让组织保持相关性矩阵,甚至建立一个正在使用的几个项目OSS许可证的库存
  • 的NuGet通知您可用的软件包更新
  • 创建包使人想到组件架构(所有的依赖关系也应该被打包)
  • 包的依赖关系是aut omatically解决了(所以你不能忘记任何)需要

上述清单并非详尽无遗的时候

  • 的NuGet是足够聪明,添加程序集绑定重定向,但我希望我浑身这个答案的关键优势。我相信还有更多。

    干杯, 泽维尔

  • +0

    谢谢。我认为这些是隐藏的好处,我错过了!优秀的职位。 – Navid

    3

    理由使用的NuGet是你没有出货的所有图书馆项目,降低了项目的规模。使用NuGet Power Tools,通过指定Packages.config文件中的软件包版本,您将能够在第一次运行项目时下载所有必需的库。

    直播Exapmle:降低了项目的大小事宜,同时project.Like的部署,如果解决方案 有代码和包200MB 500MB的大小,则额外的200MB真的 成本上传项目中的每个time.Instead上传混凝土 的我们需要在packages.config文件中设置它们的引用。

    相关问题