You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

dotnet build与dotnet publish命令的物理区别是什么?

dotnet build 与 dotnet publish 的物理差异

非自包含模式下的核心差异

  • 输出目录与文件结构:
    • dotnet build 默认输出到 bin/<Configuration>/<TargetFramework>/,包含编译后的程序集(.dll、.pdb)、项目依赖程序集,以及调试文档(.xml)、增量编译临时文件等中间产物。
    • dotnet publish 默认输出到 bin/<Configuration>/<TargetFramework>/publish/,除基础程序集外,会自动清理编译临时文件、优化依赖结构:比如移除增量编译用的辅助文件,整理Web项目的静态资源(wwwroot)、部署配置文件,让目录更简洁。
  • 依赖处理逻辑:
    • dotnet build 仅从NuGet缓存复制依赖程序集,不做任何修剪或优化。
    • dotnet publish 会根据项目发布配置(如PublishTrimmed)移除未被使用的依赖程序集,即便非自包含模式,也能让发布包体积更小。
  • runtimeconfig.json 差异:
    • build 生成的是基础版本的运行时配置文件,仅包含框架依赖信息。
    • publish 会根据发布参数调整配置,比如添加部署相关的运行时选项。

自包含模式下的额外差异

当使用dotnet publish -r <RuntimeIdentifier> --self-contained true时,发布目录会包含完整的.NET运行时、核心库文件;而dotnet build即便指定运行时,也只会输出项目和依赖程序集,不会打包运行时。

你觉得非自包含模式下文件“相同”,是因为核心程序集确实一致,但publish目录少了中间编译产物,结构更适合直接部署。

内容的提问来源于stack exchange,提问作者kakha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 13:01:41