65.9K
CodeProject 正在变化。 阅读更多。
Home

NuGet 生态系统概述

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.76/5 (12投票s)

2013年7月29日

MIT

10分钟阅读

viewsIcon

67895

从一小组工具到更庞大的生态系统……

引言

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 生态系统

由于 NuGet 项目是开源的,遵循宽松的 Apache v2 许可,其他项目可以利用 NuGet,公司也可以在其产品中构建对它的支持。所有这些都将 NuGet 生态系统扩展到今天的状态,其中包含:


Outercurve Foundation

Outercurve NuGet 客户端的源代码可以在 Codeplex 上找到,而 NuGet Gallery 的源代码可在 GitHub 上找到。

Outercurve 的 NuGet 工具包括:

  • NuGet Core 项目
    • 下载: 源代码 (Codeplex) 或 NuGet 包
    • 许可证: Apache v2
    • 大多数 NuGet 客户端工具都基于跨平台的 NuGet.Core 项目。如果您想构建自己的 NuGet 客户端,最好从 Codeplex 获取 NuGet.Core 项目的 源代码,或者在 NuGet 包管理器控制台中运行以下命令:
Install-Package NuGet.Core

如果您想使用 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 产品的一部分提供,并作为每个产品扩展库中的扩展可用:


NuGet 包管理器

Microsoft 核心 NuGet 团队的一位开发人员创建了一个出色的图形化工具来处理 NuGet 包。它允许您非常轻松地创建、发布、下载和检查 NuGet 包及其元数据。


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 DiscoveryPackage 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 系统级包管理器,允许您在系统上搜索和安装软件组件,甚至可以无人值守安装。看起来非常有前途,绝对值得关注!


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 包。


CoApp

CoApp 项目*最初*旨在通过提供构建完整的社区驱动包管理系统所需的技术,以及使开发人员能够利用 Windows 平台功能的工具,来创建一个充满活力的 Windows 开源生态系统。

该项目已*转向*与 NuGet 项目*融合*,其协作成果体现在 NuGet 2.5 中,该版本*首次*引入了对*本地项目*的支持。CoApp 项目仍在构建 其他工具 以增强 NuGet 中 C/C++ 的支持。


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 来快速设置开发环境。


其他 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 构建。以下是我发现有趣的一些:


很高兴看到 NuGet 的采用率不断增长,特别是当人们提出创新想法来进一步简化我们的工作时。如果您有任何可以改进 NuGet 工具的方法,无论是 Outercurve、Microsoft 还是任何其他基于 NuGet 的产品,请告诉他们您的想法。报告缺陷、提交功能请求、提供反馈、编写文档或提交拉取请求,并体验整个社区的永恒感激!

历史 

  • 2013 年 8 月 19 日 - 添加了 NuGet Concierge 项目
  • 2013 年 8 月 1 日 - 更新了 Coapp 项目描述
  • 2013 年 7 月 30 日 - 首次发布
© . All rights reserved.