编译与构建
编译与构建
.NET CLI
Rust 中最接近 .NET CLI(dotnet)的工具是 Cargo(cargo)。
两者都像“统一入口”,把底层编译/构建能力封装成更易用的命令。
例如在 .NET 里,虽然可以直接调用 csc 或 dotnet msbuild,但实践中更常用
dotnet build。Rust 也是类似:虽然可直接调用 rustc,但通常使用
cargo build 更高效。
构建
在 .NET 中,使用 dotnet build 构建可执行程序时,会先还原依赖,
再编译为 assembly(IL)。该产物通常可跨平台运行(前提是目标机器安装了 .NET 运行时),
并且依赖程序集通常与主程序集共同输出。
在 Rust 中,cargo build 也会执行构建流程,但默认会把代码
静态链接(亦存在其他 linkage options)为单个“平台相关”的二进制文件。
.NET 常通过 dotnet publish 做发布准备,支持 FDD/SCD。Rust 没有完全对应
dotnet publish 的命令语义,因为每个目标平台的构建结果本身通常已是可分发二进制。
构建库时,.NET 依旧输出 IL 程序集;Rust 则输出针对目标平台编译后的库产物。
另见:
依赖管理
在 .NET 中,项目文件定义构建选项与依赖。Rust 使用 Cargo 时,由 Cargo.toml
声明包信息与依赖。
一个典型 .csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="morelinq" Version="3.3.2" />
</ItemGroup>
</Project>对应的 Cargo.toml:
[package]
name = "hello_world"
version = "0.1.0"
[dependencies]
tokio = "1.0.0"Cargo 默认约定:
src/main.rs是与包同名的二进制 crate 根src/lib.rs表示该包同时包含同名库 crate
包
.NET 生态最常用 NuGet。比如用 .NET CLI 添加依赖:
dotnet add package morelinq
Rust 中可用 Cargo 添加依赖:
cargo add tokio
.NET 常见包源是 nuget.org,Rust 常见包源是 crates.io。
静态代码分析
从 .NET 5 起,Roslyn 分析器已随 SDK 提供,可做代码质量和风格检查。 Rust 对应工具是 Clippy。
和 .NET 通过 TreatWarningsAsErrors 把警告视为错误类似,
Rust 可通过 cargo clippy -- -D warnings 在有警告时直接失败。
Rust CI 中还常见的静态检查:
- 运行
cargo doc,确保文档可正确生成 - 运行
cargo check --locked,确保Cargo.lock与依赖一致