.NET Core 提供的发布应用程序选项 self-contained 是共享应用程序的好方法,因为应用程序的发布目录包含所有组件、运行时和框架。您只需要告诉使用者应用程序的入口 exe 文件,就可以使程序运行起来,而不必担心目标计算机上是否存在.NET Core 运行时和应用框架。目前 .NET Core 3.0 Preview 6 已经推出,也包含了更多新功能。其中一个有用的功能就是引入了 PublishTrimmed 发布标志。此标志可以很大程序上减少可执行文件的大小并会创建一个修剪过的自包含单体可执行文件。下面我们来看一下如何发布一个经过修剪的单体可执行文件。

.NET Core 3.0 中发布 self-contained 程序可以使用下面的命令:

dotnet publish -r win-x64 -c Release --self-contained

上面的命令执行之后会在创建的发布文件夹中包含 self-contained 可执行程序所需的所有文件,文件数大概有 100 个左右,如果想要在目标计算机上运行这个应用程序,那就需要复制这个发布文件夹内所有文件,似乎并不是那么方便,而且这些文件占用的空间也不算小。

这个问题在 .NET Core 3.0 Preview 5 中得到了解决。此版本引入了一个 PublishSingleFile 发布标志,用于生成一个单体 exe 可执行文件。该发布标志的使用方法如下:

dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true

或者在项目文件中配置如下节点:

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<RootNamespace>Hello_.NETCore3</RootNamespace>
<PublishSingleFile>true</PublishSingleFile>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
</PropertyGroup>

使用此发布标志后只会生成一个 exe 可执行文件和符号文件。见下图

现在只有一个可执行文件了,但其文件大小有点儿小问题,一个可执行程序接近 70MB 。上面说过,在 .NET Core 3.0 Preview 6 中引入了 PublishTrimmed 发布标志,使用该发布选项将不会包含您未使用的类库,以达到减小发布单体文件的尺寸。您可以将上面的两个命令一起使用,如下:

dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true /p:PublishTrimmed=true

或在项目文件中配置以上两个发布标志:

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<RootNamespace>Hello_.NETCore3</RootNamespace>
<PublishSingleFile>true</PublishSingleFile>
<PublishTrimmed>true</PublishTrimmed>

<RuntimeIdentifier>win-x64</RuntimeIdentifier>
</PropertyGroup>

使用上面的两个命令后,您会发现,单体可执行文件的尺寸只有 29MB 了。对于简单的控制台应用程序来说,它仍然有点儿大,但请注意,这是一个包含了 .NET Core 运行时的 self-contained 应用程序。

以上就是我要介绍的全部内容了。

原文链接:https://www.talkingdotnet.com/create-trimmed-self-contained-executable-in-net-core-3-0/

译者注:

参考链接:

【译】.NET Core 3.0 发布小尺寸 self-contained 单体可执行程序的更多相关文章

  1. 译 .NET Core 3.0 发布

    原文:<Announcing .NET Core 3.0> 宣布.NET Core 3.0 发布 很高兴宣布.NET Core 3.0的发布.它包括许多改进,包括添加Windows窗体和W ...

  2. .net core 3.0 发布 500.0 - ANCM In-Process Handler Load Failure 错误

    .net core 3.0 发布后报500.0错误  原因: 发布设置和下载的Runtime SDK不匹配 https://dotnet.microsoft.com/download/dotnet-c ...

  3. .Net Core 2.0发布到 CentOS

    上一篇 在CentOS 7中 使用 Nginx 反代 .Net Core 中创建的项目是创建的默认项目,现在我们来将我们开发的项目发布到 CentOs 中,反代还是使用 Nginx 1.创建一个 .N ...

  4. asp.net core 2.0发布到IIS报错解决方案

    大体来说,是环境的问题. 第一个错误,如图: 1. 查了网上说是文件夹权限的问题,依次设置了Everyone权限和IIS_IUSER权限,能勾选的都勾选了,然而并没有什么用,看来不是这个问题导致的. ...

  5. ASP.NET Core 2.0发布/部署到Ubuntu服务器并配置Nginx反向代理

    原文链接https://www.linuxidc.com/Linux/2017-12/149557.htm ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用AS ...

  6. asp.net core 2.0发布到IIS流程及报错解决方案

      我这是个新装的服务器,没有安装任何软件. 一.发布流程 1.安装AspNetCoreModule托管模块,同时会自动安装..net core runtime DotNetCore.2.0.8-Wi ...

  7. ASP.NET CORE 2.0 发布到IIS,IIS如何设置环境变量来区分生产环境和测试环境

    0.前言 因为给前端的测试环境是windows,所以要设置windows上的环境变量,如果上Linux就没有这篇文章了,所以大家不要在意为什么core不放在linux上. 1.网上的解决方案 a 方式 ...

  8. NET CORE 2.0发布在IIS上提示502.5错误

    在装了WindowsHosting和NET CORE SDK后,如果没有重启服务器,访问站点报以上错误,解决办法要么重启,要么执行以下两条命令: net stop was /y net start w ...

  9. aspnet core 2.0 发布之后没有 views文件夹

    在项目文件里面 增加这个节点: MvcRazorCompileOnPublish 设置为false 是会发布views <PropertyGroup> <PackageTargetF ...

随机推荐

  1. MySQL自动填充

    一.数据库级别 1.1 表设计 create_time默认值添加CURRENT_TIMESTAMP. update_time默认值添加CURRENT_TIMESTAMP,更新打勾. 1.2 验证是否成 ...

  2. Centos7上安装rabbitmq和使用

    github rpm地址: https://github.com/rabbitmq/erlang-rpm 要安装rabbitmq先安装它的语言 创建erlang repo /etc/yum.repos ...

  3. jquery 操作checkbox是否选中的正确方法

    对于checkbox,若要选中,需要用jquery的prop()方法,不要用attr(). <input type="checkbox" id="slide_che ...

  4. WPF 中的 路由事件

    public class ReportTimeEventArgs:RoutedEventArgs { public ReportTimeEventArgs(RoutedEvent routedEven ...

  5. swagger2 注解说明文档

    @Api:用于类上,说明该类的作用.可以标记一个Controller类做为swagger 文档资源 @Api(value = "xxx", description = " ...

  6. session.flush与transaction.commit

    以session的save方法为例来看一个简单.完整的事务流程,如下是代码片段: ---------------------------- Session session = sessionFacto ...

  7. JDBC中级篇——批处理和PreparedStatement对有sql缓冲区的数据库的友好,测试

    注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package a_batch; import util.JdbcUtil; import java.sql.Connection; ...

  8. Linux centos 安装 maven 3.5.4

    一.maven下载 1.官方下载 打开网址:http://maven.apache.org/download.cgi 下拉滚动条,找到标记处并点击 选择自己想要的版本,我这里选择的是 3.5.4,然后 ...

  9. rabbitMq可靠性投递之手动ACK

    #手动应答#spring.rabbitmq.listener.simple.acknowledge-mode=manual#spring.rabbitmq.listener.simple.acknow ...

  10. Windows内核-7-IRP和派遣函数

    Windows内核-7-IRP和派遣函数 IRP以及派遣函数是Windows中非常重要的概念.IRP 是I/O Request Pocket的简称,意思是I/O操作的请求包,Windows中所有Use ...