剪裁独立部署和可执行文件

自 .NET 问世以来,依赖框架的部署模型是最成功的部署模型。 在这种情况下,应用程序开发人员仅将应用程序和第三方程序集捆绑在一起,期望 .NET 运行时和运行时库在客户端计算机中可用。 此部署模型仍是最新 .NET 版本中的主导模型,但在某些情况下,依赖框架的模型并不是最佳模型。 替代方法是发布自包含的应用程序,其中 .NET 运行时和运行时库与应用程序和第三方程序集捆绑在一起。

剪裁自包含部署模型是自包含部署模型的专用版本,该模型已优化以减小部署大小。 对于一些客户端场景(如 Blazor 应用程序),最大程度地减小部署大小是很重要的要求。 根据应用程序的复杂性,只引用 framework 程序集的子集,运行该应用程序时需要每个程序集中代码的子集。 不需要这些未使用的库部分,可从打包的应用程序中进行剪裁。

但是,由于无法可靠地分析各种有问题的代码模式(主要集中在反射使用),应用程序的生成时间分析可能会导致运行时失败。 为了缓解这些问题,只要剪裁器无法完全分析代码模式,就会生成警告。 有关剪裁警告的含义以及警告解决方法的信息,请参阅剪裁警告简介

注意

  • .NET 6 及更高版本完全支持剪裁。 剪裁在 .NET Core 3.1 和 .NET 5 中是一项实验性功能。
  • 剪裁只能用于独立发布的应用程序。

导致剪裁问题的组件

警告

并非所有项目类型都可以剪裁。 有关详细信息,请参阅已知剪裁不兼容性

导致生成时间分析难题的任何代码都不适合剪裁。 在应用程序使用时出现问题的一些常见编码模式源自不受限制的反射用法,以及在生成时不可见的外部依赖项。 不受限制的反射的示例是旧的序列化程序(如 XML 序列化),而不可见外部依赖项的示例是内置 COM。 若要解决应用程序中的剪裁警告,请参阅剪裁警告简介;若要使库与剪裁兼容,请参阅准备 .NET 库以进行剪裁

启用剪裁

  1. <PublishTrimmed>true</PublishTrimmed> 添加到项目文件。

    此属性将在独立发布时生成一个经过裁剪的应用。 它还会关闭不兼容剪裁的功能,并在生成期间显示剪裁兼容性警告。

    <PropertyGroup>
        <PublishTrimmed>true</PublishTrimmed>
    </PropertyGroup>
    
  2. 然后使用 dotnet publish 命令或 Visual Studio 发布应用。

使用 CLI 发布

以下示例将 Windows 应用发布为经过剪裁的独立应用程序。

dotnet publish -r win-x64

仅独立应用支持剪裁。

<PublishTrimmed> 应在项目文件中设置,以便在 dotnet build 期间禁用不兼容剪裁的功能。 但也可以将此选项设为 dotnet publish 的参数:

dotnet publish -r win-x64 -p:PublishTrimmed=true

有关详细信息,请参阅使用 .NET CLI 发布 .NET 应用

使用 Visual Studio 发布

  1. 在解决方案资源管理器中,右键单击要发布的项目,并选择“发布”。

    Solution Explorer with a right-click menu highlighting the Publish option.

    如果还没有发布配置文件,请按照说明创建一个并选择“文件夹”目标类型 。

  2. 选择“更多操作”>“编辑”。

    Visual studio publish profile with edit button.

  3. 在“配置文件设置”对话框中,设置以下选项 :

    • 将“部署模式”设置为“自包含” 。
    • 将“目标运行时”设置为要发布到的平台 。
    • 选择“剪裁未使用的代码”。

    选择“保存”保存设置并返回到“发布”对话框 。

    Profile settings dialog with deployment mode, target runtime, and trim unused assemblies options highlighted.

  4. 选择“发布”以发布剪裁过的应用 。

有关详细信息,请参阅使用 Visual Studio 发布 .NET Core 应用

使用 Visual Studio for Mac 发布

Visual Studio for Mac 不提供发布应用的选项。 你需要按照使用 CLI 发布部分中的说明手动发布。 有关详细信息,请参阅使用 .NET CLI 发布 .NET 应用

请参阅