Skip to content

MSBuild 和 NuGet 的区别

MSBuild 和 NuGet 都是 .NET 生态中的重要工具,但它们的职责和用途完全不同。

特性MSBuildNuGet
主要作用项目构建工具,负责编译代码、执行任务、生成输出包管理工具,负责下载、安装、管理依赖库
核心功能- 解析 .csproj 文件
- 执行编译、测试、发布等任务
- 支持自定义构建流程
- 从 NuGet 仓库(如 nuget.org)下载包
- 管理项目依赖(<PackageReference>
- 处理包版本冲突
配置文件.csproj.targets.props 文件packages.config(旧版)或 <PackageReference>(新版)
命令行工具msbuild.exe / dotnet buildnuget.exe / dotnet add package
依赖关系不直接管理第三方库,但可以集成 NuGet 恢复的包专门管理第三方库(如 Newtonsoft.Json、EF Core)
典型使用场景- 编译解决方案
- 运行自定义构建任务(如代码生成)
- 发布应用程序
- 安装日志库(如 Serilog)
- 更新 Entity Framework Core
- 管理共享的内部 NuGet 包

详细说明

1. MSBuild(Microsoft Build Engine)

  • 作用:MSBuild 是 .NET 的默认构建系统,负责解析 .csproj 文件,执行编译、打包、发布等任务。
  • 关键点
    • 基于 XML 的构建脚本(如 <Target>, <ItemGroup>)。
    • 支持条件编译(如 Debug/Release 配置)。
    • 可扩展(通过自定义 .targets 文件)。
  • 示例
    xml
    <!-- .csproj 文件片段 -->
    <Target Name="HelloWorld" AfterTargets="Build">
      <Message Text="构建完成!" Importance="high" />
    </Target>
    sh
    # 命令行构建
    msbuild MyProject.csproj
    # 或(.NET Core+)
    dotnet build

2. NuGet

  • 作用:NuGet 是 .NET 的包管理器,用于下载和管理第三方库(如 Newtonsoft.Json)或内部共享库。
  • 关键点
    • 包存储在仓库(如 nuget.org 或私有仓库)。
    • 支持版本控制(如 1.0.0, [2.0, 3.0))。
    • 现代 .NET 项目使用 <PackageReference>(而非旧的 packages.config)。
  • 示例
    xml
    <!-- .csproj 中的 NuGet 引用 -->
    <ItemGroup>
      <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
    </ItemGroup>
    sh
    # 安装包
    dotnet add package Newtonsoft.Json
    # 或(旧版)
    nuget install Newtonsoft.Json -Version 13.0.1

协作关系

  • NuGet 恢复 + MSBuild 编译
    1. NuGet 先下载依赖包到 obj/project.assets.json 和全局缓存(~/.nuget/packages)。
    2. MSBuild 编译时,会引用这些包。

总结

工具一句话概括
MSBuild“如何构建你的代码?”(编译器 + 任务运行器)
NuGet“你的代码依赖哪些库?”(包管理器)

两者通常一起使用:NuGet 解决依赖,MSBuild 负责编译和打包。

✨ 网站运行时间: 3年11月15天 ❤️ 道阻且长,行则将至 - 微信号: heikedreamer