"优秀的程序员不是一直造轮子,而是知道什么时候该用现成的轮子。"
对于刚接触 .NET 的同学来说,经常会听到别人说:
"这个功能装个 NuGet 包就行了。"
第一次听到的时候,可能会一脸疑惑:
NuGet 到底是什么?为什么几乎所有 .NET 项目都会用到它?
不用担心,本文将带你从零开始认识 NuGet,并学会安装、更新、管理第三方库,最后还能亲手制作属于自己的 NuGet 包。
读完本文,你会发现:NuGet 就像乐高积木库一样,让开发 .NET 应用变得简单高效。 🚀
什么是 NuGet?📦
如果你使用过手机,一定安装过各种 App。
例如:
-
微信
-
QQ
-
抖音
-
Chrome 浏览器
这些应用都是从应用商店下载安装的。
而 NuGet ,就是 .NET 世界的应用商店。
不过,它安装的不是 App,而是:
-
第三方库(Library)
-
工具(Tool)
-
SDK
-
框架组件
例如:
| 需求 | NuGet 包 |
|---|---|
| JSON 序列化 | Newtonsoft.Json |
| Excel 操作 | EPPlus |
| 数据库 ORM | Dapper |
| 日志 | Serilog |
| 单元测试 | xUnit |
所以,你不用再自己重复写这些功能。
🎯 为什么需要 NuGet?
假设你需要把对象转换成 JSON。
自己写?
可能要写几百行代码。
而别人早就写好了,而且已经经过无数项目验证。
只需要安装:
Newtonsoft.Json
然后:
var json = JsonConvert.SerializeObject(user);
搞定!
是不是很像:
去乐高积木库拿一块积木,而不是自己烧塑料造一块。 🧱
所以大家常说:
不要重复造轮子(Don't Reinvent the Wheel)。
NuGet 就是帮我们找到这些"轮子"。
NuGet 的工作原理 🔍
可以把整个流程想象成这样:
你的项目
│
│ 安装包
▼
NuGet 客户端
│
▼
NuGet 官方服务器
│
下载 DLL、依赖
│
▼
项目可以直接引用
简单来说:
项目
↓
NuGet
↓
下载DLL
↓
引用成功
以后编译时,这些 DLL 会自动参与构建。
第一次安装 NuGet 包 🚀
我们安装最经典的:
Newtonsoft.Json
方法一:Visual Studio 安装(推荐)🖥️
Visual Studio 已经内置了 NuGet。
步骤非常简单:
第一步
右键项目
项目
└── 管理 NuGet 程序包...
第二步
点击
浏览(Browse)
搜索:
Newtonsoft.Json
第三步
点击:
Install
等待几秒。
完成。
是不是和手机安装 App 一样?
方法二:VS Code 安装 💻
VS Code 本身没有 NuGet 图形界面。
一般使用命令:
dotnet add package Newtonsoft.Json
输出类似:
Adding PackageReference...
Restore completed.
安装完成。
看懂 .csproj 文件 📄
安装完成以后,会发现项目多了一段:
<ItemGroup>
<PackageReference Include="Newtonsoft.Json"
Version="13.0.3" />
</ItemGroup>
很多新人第一次看到:
PackageReference
完全不知道什么意思。
其实它就一句话:
告诉 .NET:这个项目依赖 Newtonsoft.Json。
其中:
Include="Newtonsoft.Json"
表示:
安装哪个包。
而:
Version="13.0.3"
表示:
安装哪个版本。
整个意思就是:
项目需要 Newtonsoft.Json 13.0.3。
安装后的目录发生了什么?📂
很多新人会问:
DLL 去哪了?
实际上:
项目目录
一般不会存 DLL。
NuGet 会下载到:
Windows:
C:\Users\用户名\.nuget\packages
里面类似:
packages
├── newtonsoft.json
│ ├──13.0.1
│ ├──13.0.2
│ └──13.0.3
以后其它项目还能重复使用。
不用再次下载。
常见操作图解 📚
安装包
Visual Studio:
右键项目
↓
Manage NuGet Packages
↓
Browse
↓
Install
命令行:
dotnet add package Newtonsoft.Json
更新包
Visual Studio:
Updates
选择新版本:
Update
命令:
dotnet add package Newtonsoft.Json --version 13.0.3
卸载包
Visual Studio:
Installed
↓
Uninstall
命令:
dotnet remove package Newtonsoft.Json
是不是很简单?
什么是 dotnet restore?🤔
很多人第一次克隆项目:
git clone
然后直接:
dotnet run
结果:
找不到程序集
或者:
Package not found
为什么?
因为:
项目只有配置,没有 DLL。
例如:
.csproj
里面只是记录:
需要哪些包
真正的 DLL 还没下载。
这时候就需要:
dotnet restore
它会:
读取 csproj
↓
分析 PackageReference
↓
下载所有 NuGet 包
↓
放入本地缓存
然后项目才能正常编译。
为什么有时候要手动执行 restore?
通常情况下,Visual Studio 会自动执行。
但是下面几种情况建议手动执行:
✅ 第一次克隆项目
git clone
✅ 删除了 .nuget 缓存
✅ 修改了 .csproj
✅ CI/CD 自动构建
例如:
dotnet restore
dotnet build
dotnet publish
这是企业里最常见的构建流程。
避坑指南 ⚠️
坑一:版本冲突
例如:
A 包
↓
依赖 Newtonsoft.Json 12
而:
B 包
↓
依赖 Newtonsoft.Json 13
两个版本可能产生冲突。
解决办法:
✅ 尽量统一版本。
升级到兼容的最新稳定版本通常是更好的选择。
坑二:项目跑不起来
最常见原因:
依赖没有还原。
执行:
dotnet restore
或者:
Visual Studio:
Clean
↓
Restore
↓
Rebuild
大部分问题都会解决。
坑三:网络无法下载 NuGet 包
可能原因:
-
网络连接异常
-
NuGet 源配置错误
-
公司内网限制访问
可以检查:
Tools
→ NuGet Package Manager
→ Package Sources
确认 NuGet 官方源是否可用。
实战:安装 Newtonsoft.Json ✨
创建一个控制台程序:
using Newtonsoft.Json;
// 创建一个匿名对象
var user = new
{
Name = "Tom",
Age = 20
};
// 转换为 JSON 字符串
string json = JsonConvert.SerializeObject(user);
// 输出结果
Console.WriteLine(json);
输出:
{"Name":"Tom","Age":20}
是不是比自己拼接字符串方便得多?
小练习:制作自己的 NuGet 包 🎁
学会使用 NuGet 后,不妨尝试创建自己的包。
第一步
创建一个类库:
dotnet new classlib -n MyMath
第二步
添加一个简单的方法:
namespace MyMath;
/// <summary>
/// 提供基础数学计算方法
/// </summary>
public class Calculator
{
/// <summary>
/// 返回两个整数的和
/// </summary>
public int Add(int a, int b)
{
return a + b;
}
}
第三步
在 .csproj 中补充包信息:
<PropertyGroup>
<PackageId>MyMath</PackageId>
<Version>1.0.0</Version>
<Authors>YourName</Authors>
<Description>一个简单的数学工具库</Description>
</PropertyGroup>
第四步
执行打包:
dotnet pack
成功后,会在:
bin/Release
目录下生成:
MyMath.1.0.0.nupkg
这个 .nupkg 文件就是一个标准的 NuGet 包,可以发布到 NuGet 服务器,也可以提供给团队内部使用。
总结 🎉
现在,让我们回顾一下今天学到的内容:
✅ NuGet 是 .NET 的包管理器,就像手机的应用商店或乐高积木库。
✅ 通过 NuGet,我们可以快速安装和管理第三方库,避免重复造轮子。
✅ .csproj 文件中的 <PackageReference> 用于声明项目依赖的 NuGet 包。
✅ dotnet restore 会根据项目配置下载缺失的依赖,是项目能够顺利编译的重要步骤。
✅ 学会创建和打包自己的类库后,你也能将自己的代码封装成 NuGet 包,与团队共享,甚至发布到全球开发者使用。
💡 写在最后
.NET 生态之所以强大,并不仅仅因为它拥有优秀的运行时,更因为有数以万计的高质量 NuGet 包。
对于初学者来说,不需要一开始就什么都自己写。
站在巨人的肩膀上,才能看得更远。
当你熟练掌握 NuGet 后,你会发现:开发 .NET 应用,就像搭乐高一样,把一块块成熟可靠的积木组合起来,就能快速构建出功能完善的软件。🧱🚀