写点什么

Paket:一个面向.NET 的包管理器

  • 2016-01-15
  • 本文字数:1602 字

    阅读完需:约 5 分钟

Packet 是一个面向.NET 语言的包管理器,旨在作为广受欢迎的 NuGet 的一个替代选项。InfoQ 联系了项目联合创始人 Steffen Forkmann,了解更多有关 Paket 起源和特性的信息。

InfoQ:考虑到 NuGet 的广泛应用,你们主要出于什么目的创建一个新的.NET 包管理器?

Steffen Forkmann:虽然我们确实非常喜欢使用 NuGet 包,而且也为其生态系统做贡献,但在一些特殊的情况下,我们还是感觉很痛苦。大多数问题都是源于 NuGet“它只是一个 Visual Studio 宏”的理念。这意味着,nuget.exe 并没有被视为一个真正的依赖管理器,但作为一个宏,它允许开发人员下载包并 Visual Studio 项目内部引用它们。对于许多专业软件开发项目,这种隐藏依赖的理念带来了许多痛苦。加之 nuget.exe 存储包的路径里会带有版本号,而且没有全局概览,除非是在最简单的项目中,否则很快就会变得难以管理。

在我们开始 Paket 项目的时候,我们已经仔细进行过一些关于修改 NuGet 模型的讨论,但 NuGet 的团队明确表示,这不是他们想要的方式。由于 Paket 大多数新增功能都是破坏性的,他们无意将这些更改引入 nuget.exe。

所以,为了解决我们自己的依赖管理问题,Alexander Gross 和我就开始创建一个新的项目。项目的范围只是取代 nuget.exe,也就是取代 NuGet 的客户端。另外,我们还制定了以下项目原则:

  • 可以融入现有的 NuGet 生态系统
  • 使用最少的工具(纯文本文件)做事
  • 适用于所有平台
  • 一切都是自动化的
  • 创建一个优秀的社区

InfoQ:请您介绍下 Paket 中依赖解析的工作原理?它是如何处理冲突的?

SF:Paket 使用 paket.dependencies 文件指定项目依赖。通常仅指定直接依赖,而且所允许的包的版本范围常常很广。在“paket install”的过程中,Paket 需要指定特定包的具体版本,以及它们的传递性依赖。然后,这些版本会保存到 paket.lock 文件。

为了指定具体的版本,Paket 需要解决如下约束满足问题:对于 paket.dependencies 文件中的每一个包以及它们所有的传递性依赖,均选择最新的版本,这样,所有的版本约束就都得到了满足。

对于这个问题,通常存在不止一个解决方案,而解析器会选择它找到的第一个方案。Paket 的网站上有一篇文章更详细地解释了解析过程

如果解析器无法找到一个有效的解决方案,那么它需要向用户报告一个错误。由于搜索树可以非常大,而且可能包含许多不同种类的失败,所以它只会报告最后一个它无法解析的冲突,以及一些有关这个冲突的来源信息。

与 nuget.exe 不同,在整个解决方案中,相同的包,Paket 只允许用户使用一个版本。因此,用户不会无意中因为从不同的项目中引用同一个包的不同版本而引入版本冲突。如果实在需要同一个包的不同版本,那么可以通过依赖组来实现。

InfoQ:Paket 支持所有.NET 语言吗?(你们是否统计过它在 C#和 F#项目中的应用?)

SF:是的,Paket 基本上支持所有的.NET 语言——甚至是像 Nemerle 那样的东西。我们的大多数用户都是 C#企业型公司,但由于我们没有跟踪我们的用户,所以我们没有任何相关的统计数据。

InfoQ:您希望看到 Paket 未来增加什么特性?哪个特性是用户要求最多的?

SF:目前,我们正致力于 Paket 3.0 的开发,它会带来一项重要的新特性。基本的思路是,用户可以在 paket.dependencies 文件中引用一个 Git 库,Paket 会为用户克隆和构建项目。如果构建生成了 NuGet 包,那么用户可以把它们作为额外的包来源。

目前要求最多的特性是支持 CoreCLR/DNX 项目,但我们需要为此对 project.json 模型做些修改。遗憾的是,我们现在还没有想出一个满意的方案,但我们希望能够同微软的团队一起来解决这个问题。

InfoQ:您还有什么需要补充吗?

SF:我想谢谢所有的贡献者以及整个 Paket 社区,是他们让这个项目在如此短的时间内取得了如此巨大的成功。没有他们的帮助,这是不可能的。

Paket 是一个托管在 GitHub 上的开源项目。读者可以从 FsProjects 页面查看文档。

查看英文原文: Introducing Paket, a Package Manager for .NET

2016-01-15 18:003548
用户头像

发布了 1008 篇内容, 共 447.3 次阅读, 收获喜欢 346 次。

关注

评论

发布
暂无评论
发现更多内容

基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南

阿里巴巴云原生

阿里云 云原生 nacos Spring AI Alibaba

AI智能体有哪些?5个必备的Agent工具盘点

职场工具箱

人工智能 智能体 agent AIGC AIAgent

IDC最新报告:谷云科技iPaaS订阅市场稳居独立厂商第一,市场份额全国第二,仅次于华为!

谷云科技RestCloud

IDC 集成平台 ipaas

速看!用 Apache SeaTunnel 轻松实现数据到 S3 Tables 的快速集成

白鲸开源

AWS CDC Apache SeaTunnel Apache Iceberg S3 Tables

如何找到心仪的 ChatBI 智能体?Aloudata Agent 推荐给你

Aloudata

数据分析 agent ChatBI 智能数据分析 智能问数

基于华为云开发者空间-Versatile Agent开发平台构建昇腾C算子开发知识库

华为云开发者联盟

华为开发者空间 Versatile Agent.

基于华为开发者空间-云开发环境(容器)+MaaS实现智语灵犀-AI对话助手

华为云开发者联盟

MaaS DeepSeek v3 华为开发者空间

2025楼宇对讲行业十大品牌技术亮点汇总 从AI芯片到加密防护核心信息梳理

新消费日报

科研决策AI辅助系统:让科学家“看得更远、想得更深

上海拔俗

出席2025年IDC中国CIO峰会,天翼云息壤赋能千行百业数智升级!

天翼云开发者社区

数字化转型 息壤

现代数据建模:推动人工智能驱动型企业的革命

伤感汤姆布利柏

深夜办公室的叹息,被微擎 IP 市场拉回正轨

微擎应用市场

预祝 1024!X2SeaTunnel:一场 AI Coding 与数据平台结合的深度实践

白鲸开源

大数据 AI 数据同步 Apache SeaTunnel AI coding

(二)从分层架构到数据湖仓架构:数据仓库分层下的技术架构与举例

白鲸开源

大数据 数据湖 技术架构 白鲸开源 数据湖仓库

云栖实录 | 理想汽车基于 Hologres + Flink 构建万亿级车联网信号实时分析平台

阿里云大数据AI技术

flink 阿里云 hologres 实时分析 理想汽车

【10.29 直播】IoTDB 图形化工具与编程框架集成实操

Apache IoTDB

阿里云加持,《泡姆泡姆》让全球玩家畅享零延迟冒险

阿里巴巴云原生

阿里云 云原生

第一!天翼云引领中国教育公有云市场

天翼云开发者社区

公有云 天翼云

UU 跑腿使用通义灵码实现 AI 原生应用架构升级全解析:行动指南

阿里巴巴云原生

阿里云 AI 云原生 通义灵码

预祝 1024!X2SeaTunnel:一场 AI Coding 与数据平台结合的深度实践

白鲸开源

大数据 开源 数据迁移 Apache SeaTunnel X2SeaTunnel

16 倍性能提升,成本降低 98%! 解读 SLS 向量索引架构升级改造

阿里巴巴云原生

阿里云 云原生 sls

金融智能体,站在商业模式的旷野

脑极体

AI

AI音乐智能陪练系统:你的24小时个性化音乐导师

上海拔俗

【浪潮海岳inDatax数据中台专栏】浅谈主数据管理系统与业务系统的集成策略

inBuilder低代码平台

数据中台 主数据管理平台 数据集成方案 inDataX

利用排列组合法实现TOPN路径计算

天翼云开发者社区

CDN 全站加速

白鲸开源数据基建平台荣登“创客北京 2025”企业组TOP150,共同助 Agentic AI 行业变革

白鲸开源

AI 开源商业化 白鲸开源 WhaleStudio Agentic AI

ERP上线:为什么IT部门说了不算?

优秀

ERP

中国企业出海新征程:数据基础设施如何成为全球化竞争的关键变量

镜舟科技

企业出海 存算分离架构 StarRocks 湖仓一体 数据基础

云栖实录 | DataWorks 发布下一代 Data+AI 一体化平台,开启企业智能数据新时代

阿里云大数据AI技术

阿里云 Dataworks 大数据AI

服务区智慧管理系统

深圳亥时科技

Paket:一个面向.NET的包管理器_.NET_Pierre-Luc Maheu_InfoQ精选文章