.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. 使用F#编写PowerShell模块

    ▲F#和PowerShell模块 作为可能是人类世界最强大的Shell,PowerShell最大的特点是能够直接在命令间传递.NET对象,而支持这种能力的命令被称作cmdlet.自己编写PowerSh ...

  2. 【java虚拟机】jvm调优原则

    转自:https://www.cnblogs.com/xiaopaipai/p/10522794.html 合理规划jvm性能调优 JVM性能调优涉及到方方面面的取舍,往往是牵一发而动全身,需要全盘考 ...

  3. 05.SpringMVC之请求映射

    @RequestMapping是一个用来处理请求地址映射的注解,可用于类或者方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径. @RequestMapping注解有六个属性,下面进 ...

  4. 关于Java for循环的注意点

    1 import java.util.ArrayList; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 ...

  5. 了解Flask

    了解Flask 什么是Flask Flask 是一个微框架(Micro framework),所谓微框架,它就是很轻量级的,作者划分出了Flask应该负责什么(请求路由.处理请求.返回响应).不应该负 ...

  6. 在C++中使用openmp进行多线程编程

    在C++中使用openmp进行多线程编程 一.前言 多线程在实际的编程中的重要性不言而喻.对于C++而言,当我们需要使用多线程时,可以使用boost::thread库或者自从C++ 11开始支持的st ...

  7. noip模拟33

    \(\color{white}{\mathbb{失足而坠千里,翻覆而没百足,名之以:深渊}}\) 这场考试的时间分配非常不科学 开题试图想 \(t1\) 正解,一个半小时后还是只有暴力,特别惊慌失措 ...

  8. nRF52832蓝牙iBeacon广播

    开发环境 SDK版本:nRF5_SDK_15.0.0 芯片:nRF52832-QFAA 蓝牙iBeacon实现 iBeacon的核心就是广播,不需要进行连接,通过在广播包中插入信息然后广播出去. 广播 ...

  9. junit4 套件测试

    junit4 中的套件可以用来测试一个需要依赖的业务流程,如购买必须依赖与登录成功 代码实现: 测试数据存放 public class BaseTest { protected static Hash ...

  10. python库--pandas--Series

    方法 返回数据类型 参数 说明 Series(一维)       .Series() Series 实例s 创建一维数据类型Series data=None 要转化为Series的数据(也可用dict ...