news 2026/9/9 23:22:41

在 macOS 构建 PowerShell 时 dotnet restore 报 Too many open files 错误怎么解决

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在 macOS 构建 PowerShell 时 dotnet restore 报 Too many open files 错误怎么解决

在 macOS 构建 PowerShell 时 dotnet restore 报 Too many open files 错误怎么解决

【免费下载链接】PowerShellPowerShell for every system!项目地址: https://gitcode.com/GitHub_Trending/po/PowerShell

在 macOS 上从源码构建 PowerShell 时,执行Start-PSBuild会在内部的dotnet restore阶段失败,报错Too many open files。根据 docs/building/macos.md,这个错误源于 NuGet 的一个 bug:在不提高文件描述符上限的情况下,dotnet restore命令会失败。解决方法是在当前 shell 会话中执行ulimit -n 2048抬高上限,再重新触发构建。

适用环境:macOS(文档说明该构建链路所依赖的 .NET Core 只支持 macOS 10.13 及以上),并已按 docs/building/macos.md 准备好构建环境。

错误出现的位置

macOS 的构建流程与 Linux 几乎相同,docs/building/macos.md 是对 docs/building/linux.md 的补充。按文档准备环境的路径是:

  1. 安装 Homebrew 或 MacPorts(文档中说明的 macOS 包管理器)。
  2. 下载并安装一份自托管的 PowerShell。Linux 指南给出的做法是在仓库根目录运行./tools/install-powershell.sh,然后执行pwsh进入 PowerShell 会话。
  3. 导入构建模块并安装依赖:
Import-Module ./build.psm1 Start-PSBootstrap

Start-PSBootstrap会做三件事:通过brewport安装 OpenSSL 和 GNU WGet;卸载任何旧版本的 .NET CLI;下载并安装 .NET Core SDK 到~/.dotnet。注意它包含卸载已有 .NET CLI 的动作,如果机器上还有通过其他途径安装的 .NET SDK,需要先了解这一点。

环境就绪后,构建命令是:

Start-PSBuild -UseNuGetOrg

PowerShell 项目默认引用需要认证的私有 Azure Artifacts 包源,-UseNuGetOrg参数会把构建切换为使用公开的 NuGet.org 源。

dotnet restore就是在Start-PSBuild执行期间被触发的。此时若 macOS 的文件描述符上限保持默认值,构建就会以Too many open files报错中断。

解决方法:抬高文件描述符上限

文档给出的修复命令是:

ulimit -n 2048
  • 在当前终端会话中直接运行该命令,即可修复本次会话内的问题;
  • 想一劳永逸,把这条命令加进你的 shell profile,之后每次打开终端都会自动生效。文档没有指定具体的 profile 文件名,按你当前使用的 shell 的惯例放置即可。

文档同时说明了一个边界:构建模块本身无法替你执行这条命令(对应 PowerShell 项目的 issue 847),所以这一步必须由你手动完成。如果你新开一个终端窗口,ulimit -n 2048的会话级设置不会保留,要么重新执行一次,要么依赖 profile 里的持久化配置。

重新构建并验证结果

在同一终端会话中(即刚执行过ulimit -n 2048的会话),重新运行:

Start-PSBuild -UseNuGetOrg

成功的判断标准以文档描述为准:

  • dotnet restore不再报Too many open files,构建流程继续走完;
  • 构建完成后,产物位于文档指定的路径:./src/powershell-unix/bin/Debug/net6.0/osx-x64/publish/pwsh

运行这个刚构建出来的可执行文件,就能得到你亲手构建的 PowerShell,用它验证构建结果是否符合预期。

注意事项

  • ulimit -n 2048只抬高当前会话的软上限,不会影响系统全局配置;如果会话内执行后仍然报错,先确认命令是在触发构建的同一个终端里执行的,而不是另一个已打开的会话。
  • 本文路径针对 macOS 构建。在 Linux 上构建时,docs/building/linux.md 给出的产物路径为./src/powershell-unix/bin/Debug/net11.0/linux-x64/publish/pwsh,与 macOS 文档中的路径不同,不要混用两份文档的路径。
  • 如果dotnet restore因为依赖变更(project.json变化)而非文件数上限失败,docs/FAQ.md 给出的对应手段是手动执行dotnet restore或使用Start-PSBuild -Restore,这与本文的Too many open files报错是两种不同的故障,不要对调处理方式。

【免费下载链接】PowerShellPowerShell for every system!项目地址: https://gitcode.com/GitHub_Trending/po/PowerShell

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 23:22:06

Java实现IEC 61850:从SCL模型到Client/Server实战指南

简介:面向电力自动化领域Java开发者的IEC 61850协议实现资源,解决Java端与智能电子设备(IED)通信、MMS报文处理及GOOSE/SV实时数据交换等核心问题。资源共427个文件,以260个Java源码文件为主,涵盖逻辑节点、…

作者头像 李华
网站建设 2026/9/9 23:21:31

2026年SCD期刊目录更新:查询方法、学科变化与投稿避坑指南

每年到第四季度,就有不少同事和朋友开始互相问:新一年的SCD期刊目录出了没有?我所在的单位一直把SCD期刊目录列进科研成果认定范围,博士毕业、职称评审、绩效考核都要跟它挂钩。2026年的目录信息陆续开放查询后,我第一…

作者头像 李华
网站建设 2026/9/9 23:20:52

RELION安装与SLURM调度配置指南:从源码编译到GUI实操

做冷冻电镜数据处理的朋友,基本都绕不开RELION。这个软件在单颗粒分析里算是一站式平台,从运动校正、颗粒挑选到三维分类、精修,都能在同一个GUI里串起来。但真正让人头疼的往往不是算法本身,而是怎么把RELION装好,并且…

作者头像 李华
网站建设 2026/9/9 23:18:44

从原理到实操:用乐高思维拆解DOM操作核心技巧

你第一次接触“DOM”这个词,大概是在某个前端教程的目录里。旁边可能还跟着“BOM”“事件”“节点”这些让人望而生畏的名词。我当时学的时候也绕了不少弯子,总觉得这是一堆抽象的理论,直到后来真正上手写页面、做交互,才慢慢意识…

作者头像 李华
网站建设 2026/9/9 23:16:46

Typora免费替代与正版授权指南:Markdown所见即所得编辑器实战

这次我们来看 Typora。熟悉 Markdown 写作的人应该都听过这个名字:本地优先、所见即所得、界面干净,写技术博客的人用它的比例非常高。它的核心体验是“写字的时候直接看到排版效果”,不需要左右分栏预览,光标走到哪,样…

作者头像 李华
网站建设 2026/9/9 23:14:15

macOS上编译lincity-ng:从jam到CFLAGS的完整踩坑指南

前阵子折腾了一晚上,终于在自己的 MacBook 上把 lincity-ng 编译通过、跑了起来。这个老牌开源项目其实挺好玩的,跟 SimCity 一个路子,但完全免费、源码可看,而且对硬件要求极低——我愿称之为公司电脑上的摸鱼神器。但吐槽的地方…

作者头像 李华