在 VS 中构建和发布的区别?

我对在视觉工作室中构建和发布之间的区别有点困惑。

构建程序和发布程序的区别是什么?

35440 次浏览

Build 将源代码编译成(希望)可运行的应用程序。发布获取构建的结果,以及任何所需的第三方库,并将其放在某个地方供其他人运行。它也可以根据应用的框架和类型做一些改变,使应用在目的地可以运行(例如,一个控制台应用可以只复制文件,而一个 web 应用可以根据目的地设置配置)。

你的困惑可能来自于这样一个事实,即如果它认为需要的话,发布也会构建应用程序(例如,如果源代码发生了变化)。

在 VS 中构建和发布项目完全是两回事。

建造过程涉及到 编译中项目的代码并将二进制结果存储到 DLL 中。您可以在项目根目录下的 bin 调试文件夹或 bin 发布文件夹下找到它们。这取决于您是在调试模式下构建还是在发布模式下构建。这些 DLL 存储应用程序的二进制数据,并可以引用到其他项目中。

出版过程总是在构建过程之后出现。假设您有一个 ASP.NET 应用程序。如果您想使用您的项目,将您的 Web 应用程序构建成 DLL 将是不够的,因为您需要将您的 Web 应用程序托管到一个 Web 服务器,这将是 IIS 或 ASP.NET 开发服务器。它包括托管客户端实体访问的应用程序。基本上,您可以发布 Web 应用程序和 Web 服务。

构建和发布针对.NETFramework 应用程序与.NETCore 应用程序之间有一些显著的区别:

构建 .NET 框架应用程序将生成与发布相同的文件。它将创建所有依赖项作为二进制文件,包括外部依赖项(例如 NuGet 包)。所以 dotnet build的产品 准备转移到另一台机器上运行。

构建 .NET 核心应用程序时,如果项目具有第三方依赖关系,比如 NuGet 的库,那么它们将从 NuGet 缓存中解析出来,并且在项目的构建输出中不可用。因此产品的 dotnet build 不是准备转移到另一台机器上运行。您需要运行 Publish 来获取输出文件夹中的所有第三方依赖项作为二进制文件。

编辑10/21/22—— 对于3.0之前的 Dotnet 核心项目,在3.0的输出中包含第三方依赖关系之后,您可以查看该 给你

Dotnet build 命令将项目及其依赖项生成为一组二进制文件。二进制文件将项目代码包含在中间语言(IL)文件中。Dll 扩展。根据项目类型和设置,可以包括其他文件,例如:

如果项目类型是可执行目标,则为可用于运行应用程序的可执行文件。NET Core 3.0或更高版本。 用于扩展名为. pdb 的调试的符号文件。 Json 文件,其中列出了应用程序或库的依赖项。 一个. runtimeconfig.json 文件,它指定应用程序的共享运行时及其版本。 项目所依赖的其他库(通过项目引用或 NuGet 包引用)。 以前版本为目标的可执行项目。NET Core 3.0,来自 NuGet 的库依赖关系通常不会复制到输出文件夹。它们在运行时从 NuGet 全局包文件夹解析。考虑到这一点,dotnet 构建的产品还没有准备好转移到另一台机器上运行。要创建可部署的应用程序版本,您需要发布它(例如,使用 dotnet 发布命令)。有关更多信息,请参见。NET 应用程序部署。 针对可执行项目。NET Core 3.0及更高版本,库依赖项将复制到输出文件夹。这意味着,如果没有任何其他特定于发布的逻辑(比如 Web 项目) ,那么构建输出应该是可部署的。