Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

English Original

包管理:Cargo 与 NuGet

你将学到什么: Cargo.toml.csproj 的对应关系、版本说明符、Cargo.lock 的作用、用于条件编译的 feature flag,以及常用 Cargo 命令。

难度: 初级

依赖声明

在 C# 中,你使用 .csprojNuGet.config。而在 Rust 中,你需要使用 Cargo.toml

C# .csproj

<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />

Rust Cargo.toml

[dependencies]
serde_json = "1.0"

版本管理与锁文件

Rust 默认使用语义化版本 (SemVer)。

  • "1.0":表示版本号应该是 >=1.0.0<2.0.0
  • Cargo.lock:此文件会自动生成,它确保了项目中每一个开发者所使用的每一个依赖包的版本是绝对一致的。这非常类似于现代 .NET 项目中的 packages.lock.json

Feature Flags: 条件编译

Cargo 包含一个非常强大的功能,即 Features。它可以让你将某些依赖或代码块声明为可选,从而减少编译时间和二进制文件的体积。

# Cargo.toml
[dependencies]
serde = { version = "1.0", features = ["derive"] }

在你的代码中,你可以通过 #[cfg(feature = "...")] 来条件性地包含某些代码。相比 C# 中的 #if DEBUG 等预处理指令,这是一个更加清晰和标准化的解决方案。


常用命令对照表

操作dotnet 命令cargo 命令
构建项目dotnet buildcargo build
运行项目dotnet runcargo run
运行测试dotnet testcargo test
添加依赖包dotnet add package Xcargo add X
更新依赖包dotnet restorecargo update

常见第三方库 (Crates) 对应物

C# 库Rust 对应物用途
Newtonsoft.Jsonserde_json序列化/反序列化
HttpClientreqwestHTTP 请求
Entity Frameworkdieselsqlx数据库/ORM
Serilog / NLogtracinglog日志记录
xUnit / NUnit内置 #[test]单元测试

练习:添加一个依赖

挑战: 向你的项目中添加用于处理日期时间的 chrono 库,并启用其 serde 功能。

答案:

[dependencies]
chrono = { version = "0.4", features = ["serde"] }

关键理解: Cargo 不仅仅是一个简单的包管理器;它还是一个构建系统和测试运行器,为 Rust 开发人员提供了一个统一、舒心的开发体验。