Linux 如何命令行安装 NuGet 包?(.NET CLI/Mono 方案)
2025-03-30 07:32:17
Linux 命令行搞定 NuGet 包安装
一、 问题来了:Linux 上怎么用命令行装 NuGet 包?
不少开发者在 Windows 上用 NuGet 挺顺手的,一个 nuget install packages.config
命令就能把项目依赖的包给拉下来。但把开发环境换到 Linux 后,发现老办法不灵了。直接在 Linux 终端里敲这个命令,系统会告诉你找不到 nuget
这个命令,或者就算想办法跑起来了也可能遇到其他问题。
那么,在 Linux 系统上,该怎么通过命令行来安装 packages.config
文件里列出的 NuGet 包呢?这篇就来聊聊怎么解决。
二、 为啥 Windows 行,Linux 不行?
这事儿得从 nuget.exe
说起。
你在 Windows 上常用的那个 nuget
命令,对应的其实是 nuget.exe
这个可执行文件。它是微软用 .NET Framework 写的,是个原生的 Windows 程序。要在 Linux 上直接运行它,那肯定不行,系统根本不认识。
不过,故事没这么简单。现在 .NET 的世界已经进化了,有了跨平台的 .NET Core 和后续的 .NET 5/6/7/8... 这个新体系自带了一个强大的命令行工具——.NET CLI
,也就是你经常见到的 dotnet
命令。它才是管理 .NET 项目(包括 NuGet 包)的跨平台标准姿势。
当然,也不是说 nuget.exe
在 Linux 上就彻底没戏。借助 Mono 这个项目(一个开源的 .NET Framework 实现),理论上也能在 Linux 上跑 nuget.exe
。但这通常不是首选方案,特别是对于现代 .NET 项目来说。
总结一下原因:
nuget.exe
是 Windows 程序,Linux 原生不支持。- 现代 .NET 开发推荐使用跨平台的
.NET CLI
(dotnet
命令) 来管理包。 - 可以通过 Mono 运行
nuget.exe
,但属于特定场景下的备选方案。
三、 解决方案:安排!
知道了原因,解决起来就有方向了。主要有两个路子:一个是跟着时代走,用 .NET CLI
;另一个是稍微折腾下,用 Mono 配 nuget.exe
。
方案一:拥抱 .NET CLI (推荐)
这是最推荐、也是面向未来的做法。只要你的项目是基于 .NET SDK(包括 .NET Core, .NET 5+)构建的,用 dotnet
命令管理 NuGet 包就对了。
1. 原理是啥?
.NET CLI
的核心命令之一是 dotnet restore
。这个命令会分析你的项目文件(通常是 .csproj
或解决方案文件 .sln
),找出项目依赖的所有 NuGet 包,然后从配置好的包源(比如官方的 nuget.org 或者私有源)把这些包下载到本地缓存,并在项目里建立引用。
重要的是,dotnet restore
是 跨平台 的,Windows、macOS、Linux 通吃。它不仅能处理现代项目文件里 <PackageReference>
方式声明的依赖,也能兼容处理旧格式的 packages.config
文件。
2. 怎么操作?
前提是你得先在 Linux 上装好 .NET SDK。可以通过包管理器(如 apt
, yum
, dnf
)安装,或者去微软官网下载安装脚本。装好后,打开终端验证一下:
dotnet --version
能看到版本号就说明装好了。
接下来,进入包含你的项目文件(.csproj
)或解决方案文件(.sln
)的目录。
-
如果你的依赖是通过
.csproj
或.sln
管理的(推荐方式):# 切换到包含 .sln 文件或 .csproj 文件的目录 cd /path/to/your/project_or_solution_directory # 执行恢复命令 dotnet restore
或者,如果你只想针对特定的解决方案或项目文件:
dotnet restore YourSolution.sln # 或者 dotnet restore YourProject/YourProject.csproj
这个命令会自动查找当前目录或指定文件,分析依赖并下载包。下载的包通常放在用户目录下的
.nuget/packages
文件夹里。 -
如果你的项目确实还在用
packages.config
:dotnet restore
通常也能处理这种情况。只要packages.config
文件和对应的.csproj
文件在同一个目录下,直接在项目目录运行dotnet restore
就行。它会读取packages.config
,并将包下载到项目目录下的packages
文件夹(这是packages.config
的默认行为)。# 切换到包含 .csproj 和 packages.config 的目录 cd /path/to/your/project_directory # 执行恢复命令 dotnet restore
3. 安全小贴士
- 管理包源: 项目可能依赖私有 NuGet 源。你需要配置
NuGet.config
文件来添加这些源。这个文件可以放在项目、解决方案目录,或者用户配置目录 (~/.nuget/NuGet/
或~/.config/NuGet/
)。确保只从你信任的源下载包。可以用dotnet nuget list source
查看当前配置的源,dotnet nuget add source <URL>
添加源。
4. 进阶玩法
- 指定包源恢复: 如果想临时用某个特定源恢复包,或者跳过某些源:
dotnet restore --source https://api.nuget.org/v3/index.json --source https://your.private.source/nuget
- 强制恢复: 忽略之前缓存的包,强制重新下载所有包(除了 HTTP 缓存):
dotnet restore --force
- 忽略失败的源: 如果某个配置的源暂时访问不了,又不想让整个恢复过程失败:
dotnet restore --ignore-failed-sources
- 控制输出详细程度: 查看更详细的恢复日志:
dotnet restore -v detailed # 或者用 n[ormal], m[inimal], q[uiet]
.NET CLI
功能很全,推荐多查查官方文档,你会发现更多好用的选项。
方案二:Mono + nuget.exe (特定场景/旧项目)
如果你的项目非常老旧,或者有特殊原因必须使用 nuget.exe
本身,并且你不想(或不能)迁移到基于 SDK 的项目格式,那可以考虑用 Mono 来运行 nuget.exe
。
1. 原理是啥?
Mono 是一个开源项目,它实现了 .NET Framework 的大部分功能,让 .NET 程序能跑在 Linux 和 macOS 上。nuget.exe
是个 .NET Framework 程序,所以,理论上 Mono 可以运行它。你需要先安装 Mono 环境,然后下载 nuget.exe
,最后通过 mono
命令来启动 nuget.exe
。
提醒: 这条路子相对麻烦,而且不是主流推荐。只建议在确实没法用 dotnet restore
的时候考虑。
2. 怎么操作?
-
第一步:安装 Mono
不同 Linux 发行版的安装方式不一样。以基于 Debian/Ubuntu 的系统为例:
sudo apt update sudo apt install mono-complete # 安装完整的 Mono 开发环境
对于其他发行版(如 Fedora, CentOS),请查阅 Mono 官网的安装指南。装好后验证一下:
mono --version
-
第二步:下载 nuget.exe
去 NuGet 官网的下载页面 (https://www.nuget.org/downloads) 找到
nuget.exe
的下载链接。推荐下载最新稳定版。可以用wget
或curl
下载:# 确保从官方渠道下载 wget https://dist.nuget.org/win-x86-commandline/latest/nuget.exe -O nuget.exe
建议把
nuget.exe
放在一个方便访问的地方,比如用户目录下的某个文件夹,或者项目的某个固定位置。 -
第三步:使用 Mono 运行 nuget.exe
现在,你可以用
mono
命令来执行nuget.exe
了。要还原packages.config
文件,命令格式是:# mono /path/to/your/nuget.exe install /path/to/your/packages.config [options]
假设你把
nuget.exe
下载到了/home/user/tools/nuget.exe
,你的packages.config
文件在/home/user/myproject/packages.config
:# 切换到项目目录或者任意目录,只要路径指定对 cd /home/user/myproject # 执行安装命令 mono /home/user/tools/nuget.exe install packages.config
这个命令会读取
packages.config
,然后把包下载到执行目录下的packages
文件夹(这是nuget.exe install
的默认行为)。
3. 安全小贴士
- 下载来源: 一定要从 NuGet 官方网站下载
nuget.exe
,避免下载到被篡改的版本。 - Mono 兼容性:
nuget.exe
的某些高级功能可能在 Mono 环境下表现不佳或不支持。遇到问题需要具体分析。 - 环境冲突: 如果你同时在系统里装了 .NET SDK 和 Mono,注意区分使用的工具和环境,避免潜在冲突。
4. 进阶玩法
- 创建别名: 如果经常用,可以在你的 shell 配置文件(如
.bashrc
,.zshrc
)里给mono /path/to/nuget.exe
创建一个别名,比如叫nuget-mono
:echo 'alias nuget-mono="mono /path/to/your/nuget.exe"' >> ~/.bashrc && source ~/.bashrc # 之后就可以直接用 nuget-mono install ...
- 指定输出目录: 默认包会下载到
packages
目录。可以用-OutputDirectory
指定:mono /path/to/nuget.exe install packages.config -OutputDirectory ../MyPackages
- 管理包源:
nuget.exe
也支持配置包源,命令类似:# 查看源 mono /path/to/nuget.exe sources list # 添加源 mono /path/to/nuget.exe sources add -name "MyPrivateSource" -source "https://your.private.source/nuget"
四、 选哪个?
- 对于所有使用 .NET Core / .NET 5+ SDK 的项目,强烈推荐使用方案一 (
dotnet restore
) 。它是官方标准,跨平台性最好,与现代 .NET 生态系统无缝集成。 - 只有当你维护非常老的 .NET Framework 项目,且无法迁移到 SDK 风格的项目文件,或者有其他特殊需求必须用
nuget.exe
才能完成的操作时,才考虑方案二 (Mono +nuget.exe
) 。记得评估它的额外配置和潜在的兼容性问题。
现在,你应该清楚在 Linux 命令行环境下,怎么跟 NuGet 包打交道了。根据你的项目情况,选择合适的方案开干吧!