推荐阅读
  • 使 .NET Core 应用程序容器化

    备注 本教程不适用于 ASP.NET Core 应用 。 如果使用的是 ASP.NET Core,请参阅教程了解如何容器化 ASP.NET Core 应用程序。

  • 开发 ASP.NET Core MVC 应用

    “第一次是否正确完成并不重要。 最后一次正确完成才至关重要。” — Andrew Hunt 和 David Thomas

  • .NET Core CLI

    本文内容 本文适用于: ✔️ .NET Core 2.1 SDK 及更高版本.NET Core 命令行接口 (CLI) 工具是用于开发、生成、运行和发布 .NET Core 应用程序的跨平台工具链。.NET Core CLI 包含在 .NET Core S

  • .NET Core 概述

    本文内容 下载 .NET Core.NET Core 具有以下特性:跨平台:可在 Windows、macOS 和 Linux 操作系统上运行。开放源代码: .NET Core 框架是开放源代码,使用 MIT 和 Apache 2 许可证。 .NET

  • 开始使用 创建第一个 Web UI

    本文内容 作者:Rick Anderson本教程是系列教程中的第一个教程,介绍生成 ASP.NET Core Razor 页面 Web 应用的基础知识。有关面向熟悉控制器和视图的开发人员的更高级介绍,请参阅 Razor Pages 简介。在本系列结束时,

  • 开始使用 创建第一个实时 Web 应用

    本文内容 本教程介绍使用 SignalR 生成实时应用的基础知识。 您将学习如何:创建 Web 项目。添加 SignalR 客户端库。创建 SignalR 中心。配置项目以使用 SignalR。添加可将消息从任何客户端发送到所有连接客户端的代码。

  • 编写单元测试的最佳做法

    备注 自版本 2.x 起,xUnit 已删除 SetUp 和 TearDown

  • 概述 ASP.NET Core 概述

    本文内容 作者:Daniel Roth、Rick Anderson 和 Shaun LuttinASP.NET Core 是一个跨平台的高性能开源框架,用于生成启用云且连接 Internet 的新式应用。 使用 ASP.NET Core,您可以:生成 W

  • .NET Core 3.1 的新增功能

    本文内容 本文介绍了 .NET Core 3.1 中的新增功能。 此版本包含对 .NET Core 3.0 的细微改进,重点介绍小型但重要的修复。 .NET Core 3.1 中最重要的特性为,它是长期支持 (LTS) 版本。如果使用的是 Visual Stu

  • .NET Core SDK 和运行时依赖项

    备注 + 表示最低版本。

.NET Core 应用发布

可在两种模式下发布使用 .NET Core 创建的应用程序,模式会影响用户运行应用的方式。

将应用作为独立应用,生成的应用程序将包含 .NET Core 运行时和库,以及该应用程序及其依赖项。 应用程序的用户可以在未安装 .NET Core 运行时的计算机上运行该应用程序。

若将应用发布为依赖于运行时(以前称为“依赖于框架”),则生成的应用程序仅包含该应用程序本身及其依赖项。 应用程序的用户必须单独安装 .NET Core 运行时。

默认情况下,这两种发布模式都会生成特定于平台的可执行文件。 不使用可执行文件也可以创建依赖于运行时的应用程序,这些应用程序是跨平台的。

生成可执行文件时,可以使用运行时标识符 (RID) 指定目标平台。 有关 RID 的详细信息,请参阅 .NET Core RID 目录

下表概述了每个 SDK 版本用于将应用发布为依赖于运行时的应用或独立应用的命令:

类型 SDK 2.1 SDK 3.x 命令
适用于当前平台的依赖于运行时的可执行文件 ?? dotnet publish
适用于特定平台的依赖于运行时的可执行文件 ?? dotnet publish -r <RID> --self-contained false
依赖于运行时的跨平台二进制文件 ?? ?? dotnet publish
独立可执行文件 ?? ?? dotnet publish -r <RID>

有关详细信息,请参阅 .NET Core dotnet publish 命令

生成可执行文件

可执行文件不是跨平台的。 它们特定于操作系统和 CPU 体系结构。 发布应用并创建可执行文件时,可以将应用发布为独立应用依赖于运行时的应用 将应用发布为独立应用,会在应用中包含 .NET Core 运行时,该应用的用户无需在运行应用前安装 .NET Core。 如果将应用发布为依赖于运行时的应用,则该应用不包含 .NET Core 运行时和库,而仅包含该应用和第三方依赖项。

以下命令可生成可执行文件:

类型 SDK 2.1 SDK 3.x 命令
适用于当前平台的依赖于运行时的可执行文件 ?? dotnet publish
适用于特定平台的依赖于运行时的可执行文件 ?? dotnet publish -r <RID> --self-contained false
独立可执行文件 ?? ?? dotnet publish -r <RID>

生成跨平台二进制文件

以 dll 文件的形式将应用发布为依赖于运行时的应用时,将创建跨平台二进制文件。 dll 文件将与项目同名。 例如,如果有名为 word_reader 的应用,则会创建名为 word_reader.dll 的文件。 以这种方式发布的应用可通过 dotnet <filename.dll> 命令运行,并且可在任意平台上运行。

只要安装了目标 .NET Core 运行时,就可以在任何操作系统上运行跨平台二进制文件。 如果未安装目标 .NET Core 运行时,如果将应用配置为前滚,则它可以使用较新的运行时运行。 有关详细信息,请参阅依赖于运行时的应用前滚

以下命令可生成跨平台二进制文件:

类型 SDK 2.1 SDK 3.x 命令
依赖于运行时的跨平台二进制文件 ?? ?? dotnet publish

发布依赖于运行时的应用

如果将应用发布为依赖于运行时的应用,则该应用是跨平台的,且不包含 .NET Core 运行时。 应用的用户需要安装 .NET Core 运行时。

将应用发布为依赖于运行时的应用,会以 dll 文件的形式生成一个 跨平台二进制文件,还会生成面向当前平台的特定于平台的可执行文件 dll 是跨平台的,而可执行文件不是。 例如,如果发布名为 word_reader 的应用且面向 Windows,则将创建 word_reader.exe 和 word_reader.dll。 面向 Linux 或 macOS 时,将创建 word_reader 可执行文件和 word_reader.dll。 有关 RID 的详细信息,请参阅 .NET Core RID 目录

重要

发布依赖于运行时的应用时,.NET Core SDK 2.1 不会生成特定于平台的可执行文件。

可以通过 dotnet <filename.dll> 命令运行应用的跨平台二进制文件,并且它可以在任何平台上运行。 如果应用使用具有特定于平台的实现的 NuGet 包,则所有平台的依赖项都将连同应用一起复制到发布文件夹。

可以通过将 -r <RID> --self-contained false 参数传递到 dotnet publish 命令,为特定平台创建可执行文件。 省略 -r 参数时,将为当前平台创建可执行文件。 具有特定于目标平台的依赖项的任何 NuGet 包都将复制到发布文件夹。

优点

  • 小型部署
    仅分发应用及其依赖项。 .NET Core 运行时和库由用户安装,所有应用共享运行时。

  • 跨平台
    应用和任何基于 .NET 的库都可在不同的操作系统上运行。 无需为应用定义目标平台。 有关 .NET 文件格式的详细信息,请参阅 .NET 程序集文件格式

  • 使用最新修补运行时
    应用会使用目标系统上安装的最新运行时(在 .NET Core 的目标大小系列中)。 这意味着应用将自动使用 .NET Core 运行时的最新修补版本。 可以重写这一默认行为。 有关详细信息,请参阅依赖于运行时的应用前滚

缺点

  • 要求预先安装运行时
    仅当主机系统上已安装应用设为目标的 .NET Core 版本时,应用才能运行。 可以为应用配置前滚行为,要求使用特定版本的 .NET Core 或允许使用较新版本的 .NET Core。 有关详细信息,请参阅依赖于运行时的应用前滚

  • .NET Core 可能更改
    可以在运行应用的计算机上更新 .NET Core 运行时和库。 在极少数情况下,如果使用 .NET Core 库(大多数应用都会使用),这可能会更改应用的行为。 可以配置应用如何使用较新版本的 .NET Core。 有关详细信息,请参阅依赖于运行时的应用前滚

以下缺陷仅限于.NET Core 2.1 SDK。

  • 使用 dotnet 命令启动应用
    用户必须运行 dotnet <filename.dll> 命令来启动你的应用。 如果将应用发布为依赖于运行时的应用,则 .NET Core 2.1 SDK 不会生成特定于平台的可执行文件。

示例

发布依赖于运行时的跨平台应用。 dll 文件一起创建面向当前平台的可执行文件。

dotnet publish

发布依赖于运行时的跨平台应用。 dll 文件一起创建 Linux 64 位可执行文件。 此命令对于 .NET Core SDK 2.1 无效。

dotnet publish -r linux-x64 --self-contained false

发布独立应用

将应用发布为独立应用,将生成特定于平台的可执行文件。 输出发布文件夹包含应用的所有组件,包括 .NET Core 库和目标运行时。 应用独立于其他 .NET Core 应用,且不使用本地安装的共享运行时。 应用的用户无需下载和安装 .NET Core。

针对指定的目标平台生成可执行二进制文件。 例如,如果你有一个名为 word_reader 的应用,并发布适用于 Windows 的独立可执行文件,则将创建 word_reader.exe 文件。 针对 Linux 或 macOS 发布时,将创建 word_reader 文件。 dotnet publish 命令的 -r <RID> 参数指定目标平台和体系结构。 有关 RID 的详细信息,请参阅 .NET Core RID 目录

如果应用具有特定于平台的依赖项(例如包含特定于平台的依赖项的 NuGet 包),这些依赖项将与应用一起复制到发布文件夹。

优点

  • 控制 .NET Core 版本
    你可以控制随应用部署的 .NET Core 版本。

  • 特定于平台的定向
    由于你必须为每个平台发布应用,因此你知道应用可运行于哪些平台。 如果 .NET Core 引入了新平台,则用户无法在该新平台上运行你的应用,直到你发布面向该平台的版本。 在用户在新平台上运行你的应用之前,你可以测试应用以排除兼容性问题。

缺点

  • 大型部署
    由于你的应用包含 .NET Core 运行时和所有应用依赖项,因此下载大小和所需硬盘空间比依赖于运行时的版本大。

    提示

    可以通过使用 .NET Core 全球化固定模式在 Linux 系统上减少大约 28 MB 的部署大小。 这会强制应用像处理固定区域性一样处理所有区域性。

  • 较难更新 .NET Core 版本
    只能通过发布新版本的应用来升级(与应用一起分发的).NET Core 运行时。 你负责向 .NET Core 运行时的安全修补程序提供应用程序的更新版本。

示例

发布独立应用。 创建 macOS 64 位可执行文件。

dotnet publish -r osx-x64

发布独立应用。 创建 Windows 64 位可执行文件。

dotnet publish -r win-x64

请参阅

关于我们 免责声明 联系我们
Copyright © 2021 爱学习网 浙ICP备18049359号 网站地图 Google地图