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
相关产品推荐
相关产品推荐

