NuGet 3.0 预览版发行说明

NuGet 2.9 RC 发行说明 | NuGet 3.0 Beta 版本发行说明

NuGet 3.0 预览版于 2014 年 11 月 12 日作为 Visual Studio 2015 预览版的一部分发布。 我们发布了 NuGet 3.0 预览版。 这是一个十分重要的发行版(尽管为预览版),欢迎提供对相关更改的反馈意见。

Visual Studio 2012 及以上版本

此 NuGet 3.0 预览版包含在 Visual Studio 2015 预览版中。 我们正在努力尽快为 Visual Studio 2012 和 Visual Studio 2013 发布预览版。 我们先前分享了停止 Visual Studio 2010 更新的打算,而做出此决定实属艰难。

全新 UI

首先,NuGet 3.0 预览版提供了全新的 UI。 不再采用模式对话框,而是提供完整的 Visual Studio 文档窗口。 这样将可以同时打开多个项目(和/或解决方案)的 UI,将窗口分拆到其他监视器,然后按自己需要的方式放置等。

The new NuGet UI

除通过放弃模式对话框提升易用性外,新 UI 还提供了许多新功能。

版本选择

也许请求最多的 UI 功能是允许在包安装和更新时选择版本 - 这一功能现已推出。

Package Version Selection

无论是安装还是更新包,都可通过版本下拉列表查看包的所有可用版本,其中一些重要的版本已提升到列表顶部,以便于选择。 不再需要使用 PowerShell 控制台来获取不是最新版本的特定版本。

合并了已安装/在线/更新工作流

之前版本的 UI 有 3 个选项卡,分别为“已安装”、“在线”和“更新”。 其中列出了这些工作流特定的包,以及工作流特定的可用操作。 虽然这看起来很合理,不过许多人反馈这种分离经常会导致问题。

我们现在合并了这些体验,可以在一个界面中安装、更新或卸载包,而无论包是如何选择的。 为便于执行特定的工作流,我们现在提供了一个筛选器下拉列表,可用于筛选可见的包,同时我们也确保了包的可用操作的一致性。

Uninstall a Package

通过使用“已安装”筛选器,可以轻松查看已安装的包、有可用更新的包,然后可以通过更改版本选择来查看可用操作的更改,从而卸载或更新包。

Update a Package

版本合并

将同一个包安装到解决方案中的多个项目的情况十分常见。 有时,安装到各个项目的版本可能会较为分散,有必要合并所使用的版本。 NuGet 3.0 预览版特别针对这种情况引入了新功能。

右键单击解决方案并选择“管理解决方案的 NuGet 包”,即可访问解决方案级别的包管理窗口。 在此窗口中,如果某个选择安装到多个项目,但使用了不同版本的的包,则将显示新推出的“合并”操作。 在下面的屏幕截图中,Newtonsoft.Json 安装到 SamplesClassLibrary,版本为 6.0.4,同时还安装到 5.0.4 中,版本为 SamplesConsoleApp

Consolidate Versions

合并为单个版本的工作流如下。

  1. 选择列表中的 Newtonsoft.Json 包。
  2. Action 下拉列表中选择 Consolidate
  3. 使用 Version 下拉列表来选择要合并到的版本
  4. 选中需要合并到该版本的项目对应的复选框(请注意,已为所选版本的项目将显示为灰色)
  5. 单击 Consolidate 按钮执行合并

操作预览

无论执行哪种操作(安装/更新/卸载),新 UI 现在都提供了预览功能,从而可以预览将对项目所做的更改。 此预览功能可显示将安装的任何新包、将更新的包以及将卸载的包,以及操作过程中将保持不变的包。

在下面的示例中,我们可以看到安装 Microsoft.AspNet.SignalR 将导致对项目进行相当多的更改。

Preview Installing SignalR

安装选项

使用 PowerShell 控制台可以控制几个重要的安装选项。 现在,我们将这些功能也引入了 UI。 现在可以控制依赖项解析行为,了解是如何选择依赖项版本的。

Dependency Behavior

还可以指定当来自包的内容文件与项目中已有的文件冲突时要执行的操作。

File Conflict Action

无限滚动

在列出包时,我们过去经常收到有关 UI 同时提供了滚动和分页功能的反馈。 一个相当常见的情景是必须滚动到短列表底部,单击下一页码,然后再次滚动。 新 UI 在包列表中支持无限滚动,因此只需滚动,无需分页。

Infinite Scrolling

要有效,要快速,要好看

非常欢迎试用新版 UI。在此预览版里程碑中,我们遵循“要有效,要快速,要好看”的古训。在此预览版中,我们基本上完成了第一个目标,也就是让它有效。 我们知道它的速度还不够快,外观也还不太漂亮。 我们将争取从现在起到 RC 发行版之前实现这些目标。 同时,我们也希望听到大家对新 UI 易用性的反馈,包括新 UI 的工作流、操作以及外观等等

与旧 UI 相比,我们移除了几个功能。 其中一个是特意的,另一个只是未能如期完成。

搜索“全部”包源

旧 UI 允许对所有包源执行包搜索。 我们在新 UI 中移除了此功能,并且未来也不会恢复。 此功能用于对所有包源执行搜索操作,将结果汇总在一起,并尝试根据排序选择对结果进行排序。

我们发现搜索相关性真的很难糅合。 你能想象对 Google 和必应执行搜索,并将结果糅合在一起吗? 此外,该功能速度很慢,很容易意外使用,并且我们认为它很少真正有用。 由于该功能引入的问题,我们收到了许多无法修复的 bug 报告。

全部更新

旧 UI 中往往会有一个“全部更新”按钮,新 UI 中已不再存在。 我们将在 RC 发行版中重新恢复此功能。

新客户端/服务器 API

除新包管理 UI 中引入的所有新功能外,我们也在落实 NuGet 客户端/服务器协议的一些实现细节。 我们已完成的工作是为 NuGet 创建“API v3”,它专门围绕关键场景(如包还原和安装包)的高可用性而设计。 新的 API 基于 REST 和超媒体,同时我们已选择 JSON-LD 作为资源格式。

在 NuGet 3.0 预览版中,包源下拉列表中会显示名为“preview.nuget.org”的新包源。 如果选择该包源,我们将使用新 API 连接到 nuget.org。预览源已可在 UI 中使用,同时我们也在继续测试、修改和改进新 API。 在 NuGet 3.0 RC 中,这一基于 API v3 的新包源将替换基于 v2 的“nuget.org”包源。

尽管我们在 API v3 上进行了大量投入,但我们已确保所有这些新功能同样支持现有的 API v2 协议,这意味着它们也支持除 nuget.org 以外的现有包源。

即将推出的新功能

从现在其到 3.0 RTM,除目前可以在 UI 中看到的外,我们还将引入一些基本的新 NuGet 功能。 以下简要列举了我们重点投入研究的领域:

  1. 我们正在与 Visual Studio 和 MSBuild 团队合作,以在平台中提供更深入的 NuGet 功能
  2. 我们正在研究放弃安装时包约定,计划通过在打包时引入新的“权威”程序包清单来应用这些约定。
  3. 我们正在研究重构 NuGet 代码库,使客户端和服务器组件在除 Visual Studio 包管理以外的其他域中也可重复使用。
  4. 我们正在研究“专用依赖项”的概念,即包可以指示它仅依赖其他包提供实现细节,并且不将这些依赖项显示为顶层依赖项。

敬请关注

请关注我们的博客,以便了解 NuGet 3.0 的更多进展和公告!