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

Nav*_*vid 6 package-managers visual-studio nuget

我知道当我们想要使用第三方组件时,像NuGet这样的Package Manager会帮助我们.

来自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. 
Run Code Online (Sandbox Code Playgroud)

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

NuGet为包及其依赖项自动执行所有这些常见和繁琐的任务.它消除了将第三方开源库合并到项目源代码树中的几乎所有挑战

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

Xav*_*ter 18

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

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

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

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

干杯,泽维尔