【问题标题】:Why we need a package manager like Nuget?为什么我们需要像 Nuget 这样的包管理器?
【发布时间】:2012-10-11 17:12:31
【问题描述】:

我知道当我们想使用第三方组件时,像 NuGet 这样的包管理器可以帮助我们。

来自 Nuget Codeplex 页面:

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

有大量有用的 3rd 方开源库出来了 有 .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 将包的所有这些常见且繁琐的任务自动化为 以及它的依赖关系。它消除了几乎所有的挑战 将第三方开源库合并到项目的 源码树

这些步骤是我们在设置项目时执行的简单任务。它仅用于自动添加 3rd 方组件并确定配置文件中出错的机会?或者它有更多的责任!?

【问题讨论】:

  • 我不确定您在问什么,您是否希望它做其他事情?
  • 我认为像 Nuget 这样的东西想要解决的问题不是什么大问题!在某些情况下,它会增加团队工作的复杂性,尤其是在与初级程序员打交道时。
  • 你需要它,因为它可以做所有这些事情......?
  • 一些初级程序员可能会觉得三元运算符很复杂,但这并不意味着开发人员应该避免使用它...
  • IMO NuGet 简化了整个引用,而不是让它变得更复杂。你确定问题出在初级程序员身上吗?对于各种各样的事情,我现在可以让他们安装一个神奇地解决问题的包,一旦他们完成了它,他们就可以学习它背后的“魔法”,但他们要记住的东西比如何安装要少得多各种软件包或对配置进行某些更改。

标签: visual-studio nuget package-managers


【解决方案1】:

它的价值隐藏在公开之中:像 NuGet 这样的包ma​​nager 可以帮助您使用自动化来处理软件依赖项。许多人假设它仅适用于开源或第三方组件,但您同样可以将其用于您自己的内部包。

NuGet 的优点在于(仅举几例):

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

以上列表并非详尽无遗,但我希望我涵盖了此答案中的主要好处。我敢肯定还有更多。

干杯, 泽维尔

【讨论】:

  • 谢谢。我认为这些是我错过的隐藏好处!优秀的帖子。
【解决方案2】:

使用 NuGet 的原因是您不必交付项目中的所有库,从而减少项目大小。使用 NuGet Power Tools,通过在 Packages.config 文件中指定包版本,您将能够在第一次运行项目时下载所有必需的库。

实时示例:在部署项目时减少项目大小很重要。就像解决方案一样 有 500Mb 的代码和 200Mb 的包大小然后额外的 200mb 真的 每次上传项目的成本。而不是上传混凝土 dll 文件,我们只需在 packages.config 文件中设置它们的引用即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    相关资源
    最近更新 更多