NuGet 3 路线图发布

阅读数:669 2014 年 5 月 6 日

话题:.NET开源语言 & 开发

在最近的一篇文章中,Jeff Handley 概括了NuGet 3.x 路线图NuGet最初是作为一种分发 ASP.NET MVC 包的方式,而现在它已经成为.NET 生态系统以及 Visual Studio 本身所不可或缺的一部分。该路线图所介绍的 4 个主要部分包括:包发现、信任 / 不兼容包、API 和包安装 / 构建。

包发现

包发现部分介绍的功能相当直截了当。

  1. 上下文敏感的枚举和搜索
  2. 包创建者和消费者的统计报告
  3. 可编辑的包元数据
  4. 通过社交图发现和共享包

信任 / 不兼容包

现在并没有信任包的概念。开发者在 NuGet 上搜索他们自己认为正确的包,但是如果这些包并不是广泛流行的包那么就为不法活动留下了足够的空间。人们甚至不能信赖自己看到的作者名,因为通常情况下这些包是以个人而不是以组织的名义发布的。或者也有多个人共享同一个密钥的情况,这也会造成安全风险。

为了处理这个问题,NuGet 计划添加组织和团队帐号的支持。这些帐号,包括个人帐号,之后就能基于拥有者的声望评级。

在不兼容方面,有两个因素需要考虑。第一个是项目之间正常的不兼容。有一个报告系统会处理这种问题,它能够通知开发者在同一个项目中混合两个包的问题。

另一种类型的不兼容是合法性。尽管 NuGet 上的大部分包都是基于开源许可提供的,但是并不是所有的许可都相互兼容。因此它的另一种功能就是通过许可名称过滤。

API 变化

现在的 NuGet 包是通过一个单独的 OData 服务提供的。在 NuGet 3 中该服务将会被分割成现在被称作“微服务”的东西。确切的 API 依然在研讨中,但是计划是将其分离成下面的概念服务。

  1. 下载(服务于包安装和恢复)
  2. 元数据和来源(用于列举包并解析依赖)
  3. 搜索(获取上下文敏感的包列表和搜索结果)
  4. 度量(报告下载统计数据)
  5. 事件(暴露 Gallery 上的活动流,以供各种不同的消费服务使用)

新客户端 API 还会为下面这些领域提供一些功能:

  1. 能够更容易地遍历包元数据而不需要下载包
  2. 不需要首先读取包的元数据就能下载它们
  3. 不需要安装包就能调用依赖解析器
  4. 不需要真正地安装包就能决定它是否与某个项目兼容
  5. 支持 Semantic Versioning 2.0
  6. 支持架构、配置和工具集组
  7. 为更复杂的图提供了新的依赖解析器特性

基础设施变化

正如所有试图搜索 NuGet 的人所能证明的,NuGet 正在遭受着流行的痛楚。为了对其进行补救,他们重新构建了后端让其遵循一个最终一致的模型。

NuGet 是一个极其偏重读的系统,每写一次都伴随着数百万次的读取。但是今天的设计使用了一个写比较廉价而读非常昂贵的系统。是时候改变一下了!

为了实现近乎自由的读取,我们正在转而使用一个最终一致的响应模型。当包被上传、包的所有权发生变化或者当其他的数据写入发生的时候,我们会立即把这些数据写入到权威的数据存储(目前是 SQL)。但是对包元数据的请求或者下载并不会查询这个权威的数据存储。相反地,它们会读取后端服务计算的 JSON-LD blobs。

对于出版商而言这样做有一个代价,Jeff 继续说:

这意味着一个已发布的包在能够被发现并下载之前可能需要等上数分钟的时间。但好处是我们能够以近乎无限制的方式向外扩展我们的读取能力。同时我们能分别扩展我们的工作服务(Work Service)从而确保它能够和数据入口保持联系。

包安装 / 构建

从开发者的角度来讲,最重要的变化可能是包安装和构建方面的变动。不幸的是我们并没有了解到与此相关的详细信息。仅有下面这个特性点列表:

  1. 在构建时解析引用从而更好地重定向和多定向
  2. 直接安装不同于依赖
  3. 全局包安装
  4. NuGet 包作为构建的一个自然部分
  5. NuGet 包替代程序集作为引用的自然单元

查看英文原文Announcing the NuGet 3 Roadmap