NuGet

创建 NuGet 库

**克拉克卖
**马克尔斯

这就是第三个和最后一个系列的文章中我们对 NuGet,新的软件包管理生态系统的开发。 NuGet,一个项目的 Outercurve 基础,给出。一种方法消耗、 创作和发布包的净开发。 到目前为止,系列显示您如何管理项目库与 NuGet (msdn.microsoft.com/magazine/hh547106) 和如何成为 NuGet 作者 (msdn.microsoft.com/magazine/hh708753)。 在本文中,我们将看看承载您自己 NuGet 画廊和创建生成过程,帮助您管理您的包裹。

为什么主机画廊吗?

NuGet.org 已存在作为公共资料库,NuGet 软件包,你可能会怀疑的托管库点。 这是可以理解的但怎么样利用的生态系统基础设施开发环境的围墙内吗? 为什么不设置您自己的私人画廊,不只,以便您的产品发展生态系统,但是,更重要的是,要把它绑在你的生成和部署过程的直接? 此外,你在 NuGet.org 看到的任何东西可供你免费。

在本文中,我们将探讨创建和使用您自己的 NuGet 库所需的步骤。 正如我们之前所说,将纳入您开发生命周期的 NuGet 并不复杂,并将值得努力。 一旦完成了它,您的软件包消费、 创造和分布问题将成为遥远的记忆不超过。

采用之前,让我们探讨大多数开发人员遇到的一个使用案例:版本控制。 你的产品,取决于其整体的大小和复杂性,很可能是许多团队、 不同的发布时间表和程序集的不同的结果。 当然,发布的产品很好地为您的客户,捆绑,但其完成的旅程包括数百名,如果不是成千上万的机子产品资产的许多不同版本的生成。

过去的十年发展的做法 — — 包括自动生成和部署的系统 — — 有助于减轻疼痛,但他们总是跌短的分布和选择。 包管理系统为此提供的解决方案。

想想你自己发展生态系统中,哪些不同的团队工作,独立发布的版本,他们的消费选择。 每个小组,与自身建设和发布计划,想要控制和发布其产品的简单方法。 包管理系统中,每个团队决定产品是什么和它应该得到安装方式,获取和客户去决定时他们应该使用它。

某种程度上,这是非常类似于如何开源社区的操作,使用方便地扩展的经验证的做法。 虽然您在 NuGet.org 找到的包相当"大粒",您可以按照这些相同的做法为您构建您自己的应用程序。 好的、 具体的例子,这是软件的有用类型的可能是软件的您的公司能够建立和维护其公共产品的帮助程序库。

也许您的公司将限制库和其开发人员可以使用的版本。 这是您可以承载您自己专有的库与核准的包和包的版本的另一大原因。

快速而简单

主机 NuGet 库的最简单方法是以公开的文件共享。 这可能听起来有点简陋,但如果你需要快速和简单的东西,这种方法运作非常良好。 你认为合适,放置你的软件包,可以结构所占份额 — — 就是您 *。 nupkg 文件 — — 该共享上的任何位置。 您可以作为软件包源引用的共享。

与创建软件包源,让我们将它添加到开发环境上。 可以有多包所需的源和每个之间轻松移动。 若要编辑您包源在 Visual Studio 中的,导航到工具 |选项 |软件包管理器 |包源 (请参见图 1)。 注意到写这篇文章,当前版本 1.5。 跨 NuGet 版本,应期望的微小差异。

Adding a Package Source in Visual Studio
图 1 在 Visual Studio 中添加包源

在这里您可以添加、 删除和更改默认包源。 如果您愿意,您可以在 WebMatrix,自由发展环境相同。 只是在主菜单上的 NuGet 库图标上单击并选择添加源,如中所示图 2

Adding a Package Source in WebMatrix
图 2 在 WebMatrix 中添加包源

正如您所看到的这两个数字列出两个包的源。 您可以选择使用的只是一个或所有在任何给定的时间。

引入 NuGet 画廊

文件系统软件包源非常易于设置和开始使用时,它在分解很快启动时缩放。 幸运的是,正是这一点,建造的 NuGet.orgwas 提供一个开放的平台,为人要扩展,并建立了自己的需要。 您可以找到在 NuGet 库项目 github.com/NuGet/NuGetGallery。 NuGet 库是 ASP。NET MVC 3 项目上生成的剃刀、 OData、 SQL Server 和 Windows Azure。

理解的特性和功能 NuGet 库所能提供您发展生态系统的最佳方式是,只是探讨 NuGet.org。

您可以创建和发布包之前,你需要成为注册的用户。 一旦你已经注册,您将具有完全的权限上, 传和管理您的包裹和编辑您的配置文件。 您还可以生成可以自动完成到库的发布包的唯一的 API 密钥 (请参见图 3)。 有关发布包的详细信息,请参阅以前的文章,在这个系列中,"成为 NuGet 作者"。

A Registered User Account in NuGet
图 3 注册的用户帐户中 NuGet

当你将包上传到 NuGet 的库时,它将自动接收其自己的地方在库中,如中所示图 4

A Package Uploaded to the NuGet Gallery
图 4 包上传到 NuGet 画廊

这是您可以在其中查看有关的所有重要信息包。 为每个软件包,NuGet 库跟踪版本下载,下载总数,日期、 许可证等。 当然,一套关于 NuGet.orgsite 将最有可能产生下载大量给予其生态系统,但是这些统计信息到任何包的作者,无论项目大小的至关重要。

包饲料显然是整体的堆栈中最重要的功能。 它的 OData 喂你会发现在 http://YourGallery/api/v2。 这是您将作为您的软件包源使用相同的 URL。 没有此订阅源,所有的 NuGet 的力量都将丢失。

开始使用

开始之前,请验证您已安装以下:

在写这篇文章的时候,有没有库的安装程序和项目是根据非常积极的发展。 这意味着,最好始终转到该项目主页的最新信息。 您需要下载源和建造它,这很简单。

若要获取源,您可以只下载最新的主分支的压缩的副本或克隆源基与 git,像这样:

$ git clone https://github.com/NuGet/NuGetGallery.git

时当你这样做,你得整个源基本地。 在其根,你会找到一个 Windows PowerShell 脚本调用生成 Solution.ps1。 运行此脚本来设置您的机器和编译源代码。

如果您运行源,你会发现它的外观和感觉完全像是 NuGet.org。 你可能会想调整用户界面,或许修改主页。 这是可以理解的但很谨慎,特别是如果你的意图是要保持同步与主源基地。

生成过程符合 NuGet 画廊

下一个合乎逻辑的步骤将您的 NuGet 库集成与您现有的生成过程。 如果你没有生成过程,你在寻找一点"入门"指导团队的基础服务器 (TFS) 生成进程,请检查出 Microsoft Visual Studio ALM 巡警构建自定义指南在 rabcg.codeplex.com

好吧:你必须要使可以在库中,可能是官方的 NuGet 画廊、 专有的库或甚至一个本地文件共享的库。 不管你要执行某些任务创建的 NuGet 软件包,并且他们通常无论画廊驻留的位置相同的任务。

通过开发您的产品的过程中,要反复去完成的编码、 编译、 打包、 推动和发布过程。 你会还,我们希望,包括几个健康剂量的测试 ; 结果从测试可能会让你偏离发布到库中,如果您发现任何问题 (请参阅图 5)。

The NuGet Development Process
图 5 NuGet 发展进程

保持消费者满意工作的软件是一件好事,你会有更方便的时间,这样使用托管的进程。 请记住,虽然不能完全自动化托管的进程 ; 有不能代替人类的核查。 不要以为只是因为您的软件通过了所有自动化的测试,您可以发布。 你可以轻松发布一个包,不是准备好和使你的消费者生气。 此外,他们不会快乐如果你不断地发表他们无法跟上不断变化的版本。 使发布有意识的决定。

使用生成过程生成,包,并将您的 NuGet 库推送至库在其中执行最终的测试和做那人的核查。 这样,您可以选择持续集成或预定的生成自动推包,并使您可以测试。 你怎么可能会这样做? 下面是一个示例使用 TFS 和它的自动的构建基于工作流的能力。

NuGet.exe 是一个独立的、 参数驱动的控制台应用程序中,但它很容易可以调用另一个过程,如 TFS Team Build。 团队建设执行工作流 ; TFS 而言,这是一组自定义活动通过生成模板控制和发起的生成定义。 自动执行 NuGet 开发过程的一个打包的解决方案是在 NuGetter 项目 nugetter.codeplex.com。 此项目提供了自动化的壳周围 NuGet.exe 应用程序。 我们将使用此显示可以做包和走向自动化您自己的 NuGet 包在工作时思考的东西。

作为图 6 显示 TFS 的生成定义是哪里您提供所有必要的信息,该包装、 推送和发布。 NuGet 为构建灵活且可重复的生成过程需要几件数据和打开程序的某些部分或关闭的开关。 数据组织到为标题给你的顺序执行步骤的感的类别。

Nugetter Build Template
图 6 Nugetter 生成模板

PrePackaging 部分用于需要一些初始准备工作的复杂或 multiframework NuGet 包装。 NuGetter 可以调用 Windows PowerShell 脚本 (如果需要),组织包装更轻松的库文件。 这一步并不是必需的以便您可以使用"调用 PowerShell 脚本"标志参数告诉过程是否要执行该脚本。

您可以使用。 nuspec 文件直接来定义如何将创建您的软件包,或者您可以通过.csproj 文件所以间接做。 它是你 ; 使用更好地适合您的需要的方法。

正如您所看到的包装所需的参数都包括在内。 版本、 基路径 (包装的源文件夹)、 API 密钥和库位置 (称为源) 是作为生成定义的一部分提供的。 但是,此信息的安全,可能对您非常重要。 例如,API 密钥是什么允许您和只有你推到库的 NuGet 软件包。 如果该密钥成为公共的任何人都可能以您的名义推假包。 为此,NuGetter 允许您提供实际的 API 密钥或包含密钥的文件的路径。 如果您使用的文件路径,生成过程读取文件、 提取密钥,并使用它而不列出的关键在日志中,并维护安全。 很明显,生成服务 ID 必须到此项文件具有读取权限。

另一个潜在的问题,为您在管理您的软件包的版本。 在图 6,在生成定义中提供的版本号。 但是,确实要不断改变这一数字在生成定义吗? 当你有几个版本 (持续集成 [CI]、 每日、 其他计划和各种手动生成),将会发生什么? NuGetter 为您提供的选择直接输入的版本,或与该 API 密钥,一样可以提供文件路径定义可以使用的多个版本。 他们将都使用相同的版本号,您可以在一个地方管理它。

在示例中的推目的地是 NuGet 的库,但这是即使到内部的库或本地文件存储,正在推动您的软件包提供生成目标。 这是另一种情况,在生成过程可能需要进行干预。 NuGet.exe 预计的目标 URL 和如果你正在推动本地存储区 — — 而不是 URL — — 该进程需要解释目标格式。 在此情况下,而不是做推使用 NuGet.exe,您可以做这件事的生成过程。

NuGetter 的完整性和功能与 NuGet.exe 的奇偶校验的原因,并提供自动发布。 只是要牢记我们较早前的警告才决定要使用此功能。

顺便说一句,你不必担心,你的消费者可能会错过任何软件包更新。 社会有这满 NuGetFeed (github.com/NuGetFeed/NuGetFeed)。 NuGetFeed 可帮助您生成一个自定义 RSS 源基于您选择的软件包。 你的消费者可以将自定义的饲料添加到其最喜欢的 RSS 阅读器,并告知任何更新。

用于创建 NuGet 饲料的另一个选项是在 MyGet MyGet.org。 MyGet 可能是完美的那些人希望饲料私人 NuGet 认可的软件包的列表,但不想花时间、 金钱和精力创建和维护您自己的库基础设施。 MyGet 是托管的解决方案使您可以快速地创建库特定于您的需要。 请参阅 MyGet 站点更多详细信息。

最后,正如我们刚才所说,NuGet 和 NuGet 画廊是开放源码项目。 这意味着您正在授权提供任何内容从文档的功能,或 smash 几个 bug 一路走来。 Github 主页,项目团队提供了详细的具体步骤,你可以作出贡献。

接近尾声了

NuGet 无疑改变了我们思考的方式我们。生态净包管理系统,公共和私人。 完成该生态系统的基本组件库 NuGet 和 NuGetFeed。 这些工具带入你的日常打开新的可能性。 如前所述,NuGet 画廊是在积极发展中,因此请确保访问 github.com/NuGet/NuGetGallery 的最新信息。

您可以找到所有的链接,在这篇文章,并在更多使用 on.csell.net/HostingNuGet。  

克拉克卖 是作为微软的芝加哥以外的高级 Web 宣传员。他在播客 DeveloperSmackdown.com,在博客 csell.net ,可以发现在 Twitter 上 twitter.com/csell5

马克尔斯 是作为 Microsoft 以外的芝加哥的高级软件顾问。他在播客 DeveloperSmackdown.com,在日志博客 marnick.net ,可以发现在 Twitter 上 twitter.com/mark_nic

多亏了以下技术专家,检讨这篇文章: David EbboPhil Haack布兰登 Satrom