dotnet publish 和 dotnet pack 之间的主要区别是什么

what is major difference between dotnet publish and dotnet pack

dotnet packpublish 之间的主要区别是什么?

根据Microsoft's description,我的理解是pack创建一个包,而publish创建包+DLL。

这是正确的吗? 如果是这样,为什么不总是使用 publish 并且在不需要时不使用 DLL 文件。

dotnet pack - 生成代码的 NuGet 包。

这是关键区别 - 这将允许发布到 http://nuget.org,或者发布到可以被其他开发人员拉下的 nuget 服务器,甚至可以与 Octopus Deploy 一起使用。

dotnet publish - 生成依赖于 .NET 框架或自包含的应用程序。

关键字是 "self-contained",可能是一个安装程序,或者是一个可以通过 copying/pasting 在主机之间部署的文件夹。

添加到 :

dotnet pack:输出是一个包,意味着要被其他项目重用

dotnet publish:输出意味着部署/“运送” - 它不是单个“包文件”,而是包含所有项目输出的目录。

基本上,当我们使用pack命令时,它会创建一个包;当我们使用 publish 命令时,它会创建一个可以从任何地方复制和执行的文件夹。

pack 命令的独特之处在于,包会在不上传其依赖项的情况下更新到 nuget 服务器。当我们 运行 dotnet restore 时,它的依赖项在获取包的项目中更新。这不是 dotnet publish 的情况,因为它包含打包在包中的 third-party 依赖项。