NuGet 生态系统概述






4.76/5 (12投票s)
从一小组工具到更庞大的生态系统……
引言
NuGet 是一个免费、开源的 .NET 包管理系统,它包含几个客户端工具(NuGet 命令行和 NuGet Visual Studio 扩展)以及托管在 https://nuget.net.cn/ 上的官方 NuGet Gallery。这些工具和 Gallery 共同构成了 NuGet 项目,由 Outercurve Foundation 管理,并且是 ASP.NET 开源 Gallery 的一部分。尽管完全开源,但 Microsoft 在 NuGet 项目的开发中做出了大量贡献。
NuGet 于 2010 年首次推出,至今已存在数年,许多个人和组织开始认识到 NuGet 为改进和自动化其开发流程提供了绝佳的机会。无论您是从事开源项目还是在企业环境中工作,NuGet 都将继续存在,并且今天您将拥有一个更庞大的 NuGet 生态系统可供使用。
背景
本文将讨论 NuGet 生态系统。如果您是 NuGet 新手或需要关于如何使用 NuGet 的实用指南,我强烈建议您阅读 NuGet 文档,或购买书籍 Pro NuGet 以获取完整参考、技巧和窍门。
培训材料
使用新工具或技术通常会有一个学习曲线。幸运的是,NuGet 的学习曲线并不陡峭!事实上,任何人都可以 在短时间内开始使用包。然而,创建包,特别是创建好的包,以及在自动化构建和部署流程中采用 NuGet,都需要一些研究才能做得正确。
以下建议应能帮助您充分利用 NuGet
- 官方 NuGet 文档站点: http://docs.nuget.org/
- NuGet 博客: http://blog.nuget.org/
- Twitter 上的 NuGet 团队: @nuget
- JabbR 聊天: https://jabbr.net/#rooms/nuget
- MSDN 文章: NuGet(反)模式 Top 10
- 书籍: Apress Pro NuGet
- 我的博客也有几篇与 NuGet 相关的文章: http://www.xavierdecoster.com/tagged/NuGet
NuGet 生态系统
由于 NuGet 项目是开源的,遵循宽松的 Apache v2 许可,其他项目可以利用 NuGet,公司也可以在其产品中构建对它的支持。所有这些都将 NuGet 生态系统扩展到今天的状态,其中包含:
- Outercurve Foundation NuGet 项目
- Microsoft 的 NuGet 工具
- NuGet 包管理器
- MyGet (NuGet 即服务)
- Chocolatey
- OctopusDeploy
- RedGate Deployment Manager
- SymbolSource
- ProGet (Inedo)
- CoApp
- BoxStarter
- SharpDevelop NuGet 插件
- Xamarin NuGet 插件
- TeamCity 对 NuGet 的支持
- Artifactory 对 NuGet 的支持
- Nexus 对 NuGet 的支持
- Glimpse 插件
- ReSharper 插件
- Orchard
- NuGetMustHaves
- NuGetFeed
- NuGetLatest
- Java 中的 NuGet 服务器
- NuGet Fight
- NuGit
Outercurve Foundation
Outercurve NuGet 客户端的源代码可以在 Codeplex 上找到,而 NuGet Gallery 的源代码可在 GitHub 上找到。
Outercurve 的 NuGet 工具包括:
- NuGet Core 项目
- 许可证: Apache v2
- 大多数 NuGet 客户端工具都基于跨平台的
NuGet.Core
项目。如果您想构建自己的 NuGet 客户端,最好从 Codeplex 获取 NuGet.Core 项目的 源代码,或者在 NuGet 包管理器控制台中运行以下命令:
Install-Package NuGet.Core
- NuGet 命令行工具(它是 NuGet.Core 的包装器)
- 下载: nuget.exe
- 参考: http://docs.nuget.org/reference/command-line-reference
- 许可证: Apache v2
- NuGet Server 项目
- 下载: https://nuget.net.cn/packages/NuGet.Server
- 许可证: Apache v2
- 源代码: http://nuget.codeplex.com/
- NuGet Concierge
- 许可证: Apache v2
- 源代码: https://github.com/NuGet/Concierge
- 一个包推荐服务:上传一个 packages.config 文件,NuGet Concierge 将为您推荐可能有用的包。
- URL: http://concierge.nuget.org/
- 更多信息: http://blog.nuget.org/20130816/introducung-nuget-concierge.html
- 官方 NuGet Gallery 位于 https://nuget.net.cn
- 统计数据: https://nuget.net.cn/stats
- 可用性: http://status.nuget.org
- 许可证: Apache v2
- 源代码: https://github.com/NuGet/NuGetGallery
如果您想使用 Outercurve Foundation 提供的工具设置自己的 NuGet 服务器,可以使用以下任何一种方法:
- 要创建一个基本的 NuGet 服务器并将其指向本地文件夹或网络共享,请创建一个新的 ASP.NET 应用程序,然后在包管理器控制台中运行以下命令:
Install-Package NuGet.Server
- 优点
- 需要最少的基础设施(IIS 和一些磁盘空间)
- 需要 .NET Framework 4.0
- 缺点
- 非索引存储(随着存储库大小的增加而变慢)
- 整个服务器只有一个 API 密钥
- 没有细粒度的安全控制
- 每个 NuGet.Server 应用程序只有一个 NuGet Feed
- 要设置您自己的 NuGet Gallery,请从 GitHub 获取源代码并遵循 https://github.com/NuGet/NuGetGallery 上的说明。
- 优点
- 索引存储(查询速度更快)
- 基本用户系统(身份验证、每个用户的 API 密钥、管理自己的包、电子邮件)
- 支持 SSL
- 缺点
- 需要适当的基础设施(IIS、SqlServer)
- 需要 .NET Framework 4.5(我认为这是一个缺点,因为 .NET 4.5 是就地升级)
- 需要您获取源代码、编译所有内容,并在源代码和配置文件中进行大量配置(如果要升级到新版本,则需要重复此步骤)
- 有一个 NuGet Gallery Operations Toolkit,但它并非旨在与每个 NuGetGallery 安装都能正常工作。
Microsoft
以下 NuGet 客户端作为 Microsoft 产品的一部分提供,并作为每个产品扩展库中的扩展可用:
- WebMatrix 3 NuGetPackageManager 扩展
- Microsoft 的 NuGet 包管理器(适用于 Visual Studio 2010 和 2012)
- 下载: http://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c
- 参考
- 使用 管理 NuGet 包对话框
- 使用 包管理器控制台
- 许可证: Microsoft 软件许可(自定义)
- Microsoft 的 NuGet 包管理器(适用于 Visual Studio 2013)
NuGet 包管理器
Microsoft 核心 NuGet 团队的一位开发人员创建了一个出色的图形化工具来处理 NuGet 包。它允许您非常轻松地创建、发布、下载和检查 NuGet 包及其元数据。
- Click-once(桌面)应用程序: http://npe.codeplex.com
- Windows 8 应用: http://apps.microsoft.com/windows/en-us/app/nuget-package-explorer/3148c5ae-7307-454b-9eca-359fff93ea19/m/ROW
MyGet (或 NuGet 即服务)
MyGet 是一个 NuGet 服务器,允许您创建和托管自己的 NuGet Feed。它托管在 Windows Azure 上,并提供免费增值模式,这意味着您可以免费使用它(在 免费套餐 的限制内),或者如果您需要更多资源或功能,可以订阅付费套餐。更多信息请访问 https://www.myget.org。
- 可用性和历史: http://status.myget.org。
- 文档: http://docs.myget.org。
- Twitter: https://twitter.com/mygetteam
- JabbR: https://jabbr.net/#/rooms/myget
- 提供
- 无需基础设施
- 只需点击几下即可开始,专注于包而不是服务器
- 完全兼容所有 NuGet 客户端工具
- 免费软件更新(包括对最新 NuGet 版本的支持)
- 对开源项目免费(符合标准且在允许的配额内)
- 在公共 Gallery 中发布和推广您的 Feed
- 支持 NuGet Feed Discovery 和 Package Source Discovery
- 扩展的 Feed 功能
- 默认 SSL
- Feed 可见性(公开、只读或私有)
- 活动流
- 对推送的包进行严格的 SemVer 验证
- 直接在浏览器中上传包
- 添加来自其他 Feed 的包(上游包源)
- nuget.org(包括 WebMatrix 和其他精选 Feed)、Chocolatey、TeamCity 等的上游包源预设
- 过滤上游包源
- 镜像上游包源
- 将包推送到上游包源
- 包(自动或手动)镜像
- RSS
- 包保留规则
- 将整个 Feed 下载为 ZIP 存档,以进行备份
- 从 Web 下载包(无需 NuGet 客户端工具)
- 与 SymbolSource 集成(共享凭据和 Feed/存储库安全设置)
- 多个端点,包括 v1 兼容端点(例如,您可以将 Feed 用作自定义 Orchard Gallery Feed)
- 细粒度安全
- 每个用户的 API 密钥
- Feed 上的用户角色(所有者、联合所有者、贡献者、读者)
- 用户管理(企业版)
- 配额管理(企业版)
- 使用本地 ADFS 进行网站身份验证(企业版)
- 使用首选身份提供商进行网站身份验证:Live ID、Google、GitHub、StackOverflow 等(企业版)
- 构建服务
- 为您创建 NuGet 和符号包
- 可自定义的自动版本控制和程序集版本修补
- 自动触发 CodePlex、BitBucket 或 GitHub 提交的构建
- 支持多种单元测试框架
- 支持多种 SDK(包括 Windows Phone)
- 通过电子邮件和可下载的构建日志发送构建失败通知
- 自定义徽标和域名(企业版)
Chocolatey
Chocolatey.org 是一个基于 NuGet 的 Windows 系统级包管理器,允许您在系统上搜索和安装软件组件,甚至可以无人值守安装。看起来非常有前途,绝对值得关注!
- 文档: https://github.com/chocolatey/chocolatey/wiki
- 参考: https://github.com/chocolatey/chocolatey/wiki/CommandsReference
- Twitter: http://twitter.com/chocolateynuget
- 论坛: http://groups.google.com/group/chocolatey
- 许可证: Apache v2
- 提供
- 无人值守软件安装
- 使用单个命令安装多个包
- 易于使用的命令行工具
- 支持任何 NuGet 包源(Feed 和文件共享)
- 也有 GUI: http://chocolatey.org/packages/ChocolateyGUI
- 集成
- Web 平台安装程序
- Windows 功能
- Ruby Gems
- CygWin
- Python
OctopusDeploy
OctopusDeploy 是一个基于约定的自动化部署解决方案,使用 NuGet 作为协议。您可以免费使用社区版(仅限 1 个项目)或 购买 付费版。
- 文档: http://octopusdeploy.com/documentation
- 博客: http://octopusdeploy.com/blog
- Twitter: https://twitter.com/OctopusDeploy
- 提供
- 部署仪表板
- 通过轻量级服务代理(*触手*)实现的可伸缩性
- 环境之间的部署提升
- 支持 PowerShell 脚本
- 支持手动干预
- 支持 XML 配置转换和变量
- 支持 Windows Azure Web 和工作角色
- 支持 (S)FTP
- 有 TeamCity 插件
- 有命令行工具 (octo.exe)
- 有 REST API
- 细粒度的用户权限
- 保留策略
- 自动化 ASP.NET 部署(IIS 配置)和 Windows 服务常见任务
Deployment Manager (RedGate)
RedGate 的 Deployment Manager 是 OctopusDeploy 项目的一个自定义分支。正如 这篇文章 中解释的那样,在 OctopusDeploy v1.0 之后不久,它们就分道扬镳了。
更多信息: http://www.red-gate.com/delivery/deployment-manager/
SymbolSource
SymbolSource 是一个托管的符号服务器,与 NuGet 集成,并在 Visual Studio 中进行配置,允许您通过按需下载符号和源代码来调试 NuGet 包。
- 文档: http://www.symbolsource.org/Public/Wiki/Index
- 博客: http://www.symbolsource.org/Public/Blog
- 论坛: http://groups.google.com/group/symbolsource
- 提供
- 使用并提供 NuGet 符号包
- 使用并提供 OpenWrap 包
- 托管符号(PDB 文件)和源代码(C#、VB.NET、C++)
- 与 Visual Studio 兼容的符号服务器和源代码服务器
- 对公共和私有内容的灵活安全控制
- 与 MyGet.org 集成(共享凭据和 Feed/存储库安全设置)
- 与 NuGet.org 集成(默认符号存储库)
CoApp
CoApp 项目*最初*旨在通过提供构建完整的社区驱动包管理系统所需的技术,以及使开发人员能够利用 Windows 平台功能的工具,来创建一个充满活力的 Windows 开源生态系统。
该项目已*转向*与 NuGet 项目*融合*,其协作成果体现在 NuGet 2.5 中,该版本*首次*引入了对*本地项目*的支持。CoApp 项目仍在构建 其他工具 以增强 NuGet 中 C/C++ 的支持。
- 文档: http://coapp.org/pages/reference.html
- Twitter: @CoApp
- 源代码: https://github.com/coapp/
- 许可证: Apache v2
ProGet (Inedo)
ProGet 是一个本地 NuGet 服务器,具有免费增值模式,并提供与 Inedo BuildMaster 产品的集成。
- 文档: http://inedo.com/support/documentation/table-of-contents
- Twitter: http://twitter.com/inedo
- 提供
- 与所有 NuGet 客户端工具兼容
- 自定义 proget.exe 客户端工具
- 连接到其他 NuGet Feed 的连接器
- 连接器过滤器
- 支持多个 Feed
- 支持私有 Feed
- 许可证过滤
- 下载 Feed 和包
- LDAP 身份验证到 ProGet Web 应用程序
- 将包上传到 ProGet Web 应用程序
- 集成的符号和源代码服务器
- SDK 和 API
- 支持 OData
- 支持 NuGet Feed Discovery 和 NuSpec 扩展
BoxStarter
BoxStarter 是另一个很棒的项目,它利用 NuGet 和 Chocolatey 来快速设置开发环境。
- 文档: http://boxstarter.codeplex.com/documentation
- 源代码: http://boxstarter.codeplex.com/
- 许可证: Apache v2
其他 IDE 对 NuGet 的支持
SharpDevelop
SharpDevelop 是最早支持 NuGet 的 Visual Studio 以外的 IDE 之一。
更多信息: http://community.sharpdevelop.net/blogs/mattward/archive/2011/01/23/NuGetSupportInSharpDevelop.aspx
Xamarin 和 MonoDevelop
Xamarin Studio 和 MonoDevelop 也有 NuGet 扩展,该扩展构建在 NuGet.Core.dll 的自定义版本和 Microsoft 的 XML 文档转换 (XDT) 库的自定义版本之上。
更多信息: https://github.com/mrward/monodevelop-nuget-addin
ReSharper 插件
从 v8.0 开始,ReSharper 内置的扩展管理器允许您从托管在 https://resharper-plugins.jetbrains.com 的自定义 NuGet Gallery 中获取 ReSharper 插件包。
构建工具和存储库管理器
TeamCity
TeamCity 具有一些专门用于处理 NuGet 包的消耗、创建和发布的构建步骤。此外,它还提供了一个内置的 NuGet Feed,收集您构建工件中生成的所有包。
更多信息: http://blogs.jetbrains.com/dotnet/2011/08/native-nuget-support-in-teamcity/
Artifactory
Artifactory 是一个存储库管理器,内置支持各种工件,包括 NuGet 包。
更多信息: http://www.jfrog.com/confluence/display/RTF/NuGet+Repositories
Sonatype Nexus
Nexus 是另一个支持 NuGet 的存储库管理器,他们甚至在博客上提供了一篇“Java 开发者的 NuGet 是什么”。
更多信息: http://books.sonatype.com/nexus-book/reference/nuget.html
其他基于 NuGet 的实用程序
还有许多其他工具和实用程序基于 NuGet 构建。以下是我发现有趣的一些:
- Glimpse 扩展(插件是包)
- NuGetMustHaves.com
- NuGetFeed(构建最喜欢的包列表)
- Orchard(CMS 模块从托管在 Orchard Gallery 的 v1 NuGet Feed 中获取)
- Java 实现的 NuGet 服务器
- NuGet Fight!
- NuGit
- NuGetLatest(发布新包的 Twitter 机器人)
很高兴看到 NuGet 的采用率不断增长,特别是当人们提出创新想法来进一步简化我们的工作时。如果您有任何可以改进 NuGet 工具的方法,无论是 Outercurve、Microsoft 还是任何其他基于 NuGet 的产品,请告诉他们您的想法。报告缺陷、提交功能请求、提供反馈、编写文档或提交拉取请求,并体验整个社区的永恒感激!
历史
- 2013 年 8 月 19 日 - 添加了 NuGet Concierge 项目
- 2013 年 8 月 1 日 - 更新了 Coapp 项目描述
- 2013 年 7 月 30 日 - 首次发布