VS 中构建和发布之间的区别
本文关键字:之间 区别 布之间 构建 VS | 更新日期: 2023-09-27 18:33:13
我对可视化工作室中构建和发布之间的区别有点困惑。
构建程序和发布程序有什么区别?
面向 .NET Framework 应用程序的生成和发布与 .NET Core 应用程序之间存在一些显著差异:
生成 .NET Framework 应用程序将生成与"发布"相同的文件。它将创建所有依赖项作为二进制文件,包括外部依赖项(例如 NuGet 包(。因此,dotnet build
的产品已准备好转移到另一台机器上运行。
在生成 .NET Core 应用程序时,如果项目具有第三方依赖项(例如来自 NuGet 的库(,则会从 NuGet 缓存解析这些依赖项,并且不适用于项目的生成输出。因此,dotnet build
的产品尚未准备好转移到另一台计算机运行。您需要运行发布以将所有第三方依赖项作为二进制文件获取到输出文件夹中。
编辑 10/21/22 --对于 3.0 之前的 Dotnet 核心项目,输出中包含 3.0 第三方依赖项后就是这种情况,您可以在此处查看。
dotnet 生成命令将项目及其依赖项生成为一组二进制文件。二进制文件包含扩展名为.dll的中间语言 (IL( 文件中的项目代码。根据项目类型和设置,可能会包含其他文件,例如:
可用于运行应用程序的可执行文件(如果项目类型是面向 .NET Core 3.0 或更高版本的可执行文件(。用于调试扩展名为.pdb的符号文件。一个 .deps.json 文件,其中列出了应用程序或库的依赖项。一个 .runtimeconfig.json 文件,该文件指定应用程序的共享运行时及其版本。项目依赖的其他库(通过项目引用或 NuGet 包引用(。对于面向 .NET Core 3.0 之前版本的可执行项目,NuGet 中的库依赖项通常不会复制到输出文件夹。它们是在运行时从 NuGet 全局包文件夹解析的。考虑到这一点,dotnet 生成的产品尚未准备好转移到另一台计算机运行。若要创建可部署的应用程序版本,需要发布它(例如,使用 dotnet 发布命令(。有关详细信息,请参阅 .NET 应用程序部署。对于面向 .NET Core 3.0 及更高版本的可执行项目,库依赖项将复制到输出文件夹。这意味着,如果没有任何其他特定于发布的逻辑(例如 Web 项目有(,则生成输出应该是可部署的。
Build 将源代码编译成(希望(可运行的应用程序。发布获取构建的结果以及任何所需的第三方库,并将其放在某个地方供其他人运行它。它还可能会进行一些更改以使应用程序在目标中可运行,具体取决于应用程序的框架和类型(例如,控制台应用程序可能只是复制文件,而 Web 应用程序可能会根据目标设置配置(。
您的困惑可能来自这样一个事实,即如果 Publish 认为需要(例如,如果有源代码更改(,它也会构建应用程序。
在 VS 中构建和发布项目是完全不同的事情。
生成过程涉及编译项目代码并将二进制结果存储到 DLL 中。您可以在项目根目录下的 ''bin''debug'' 文件夹或 ''bin''release'' 文件夹下找到它们。这取决于是在调试模式下还是在发布模式下生成。这些 DLL 存储应用程序的二进制数据,并可引用到其他项目中。
发布过程始终在生成过程之后进行。假设您有一个 ASP.NET 应用程序。如果要使用项目,将 Web 应用程序构建到 DLL 中是不够的,因为您需要将 Web 应用程序托管到 Web 服务器中,该服务器将是 IIS 或 ASP.NET 开发服务器。它涉及托管要由客户端实体访问的应用程序。基本上,您可以发布 Web 应用程序和 Web 服务。