.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 发布自包含单体可执行程序的更多相关文章

  1. 译 .NET Core 3.0 发布

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

  2. VS2019(NET Core 3.0)发布单文件可执行程序

    NET Core 3.0 发布单文件可执行程序 两种方法. 一.右击vs编辑项目文件,增加PublishSingleFile节点配置,代码如下: <Project Sdk="Micro ...

  3. VS2017 IDE中发布自包含(SCD)DotNET Core项目

    根据Stack Overflow上的一个回答得知,这项功能目前VS2017并不具备,但你可以通过如下方法发布自包含项目: 1.项目文件(.csproj)中添加RuntimeIdentifier配置项, ...

  4. .Net Core 2.0生态(4):Entity Framework Core 2.0 特性介绍和使用指南

    前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升级EF也发展到EF6.x,Entity Framework Core是一个支持跨平台的全新版本, ...

  5. 【EF】Entity Framework Core 2.0 特性介绍和使用指南

    阅读目录 前言 获取和使用 新特性 项目升级和核心API变化 下一步计划 遗憾的地方 回到目录 前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升 ...

  6. [译]Writing Custom Middleware in ASP.NET Core 1.0

    原文: https://www.exceptionnotfound.net/writing-custom-middleware-in-asp-net-core-1-0/ Middleware是ASP. ...

  7. [译]ASP.NET Core 2.0 路由引擎

    问题 ASP.NET Core 2.0的路由引擎是如何工作的? 答案 创建一个空项目,为Startup类添加MVC服务和请求中间件: public void ConfigureServices(ISe ...

  8. [译]ASP.NET Core 2.0 视图引擎

    问题 如何在ASP.NET Core 2.0中使用Razor引擎来创建视图? 答案 新建一个空项目,修改Startup.cs,添加MVC服务和请求中间件: public void ConfigureS ...

  9. [译]ASP.NET Core 2.0 布局页面

    问题 如何在ASP.NET Core 2.0项目中共享可见元素.代码块和指令? 答案 新建一个空项目,首先添加GreetingService服务和UserViewModel模型: public int ...

随机推荐

  1. vs调试cordova app时 scriptedsandbox64.exe已停止工作的错误处理方法

    1.把ie更新到版本11 2.去掉 选项->调试->调试时启动诊断工具 有时候调试会启动失败,提示版本过低,再一次点击调试就可以了.

  2. 快速写入Xml文件

    我们在做一些操作的时候会需要生成日志,Xml文件就是我们常用的一种日志文件. 普通操作Xml文件的代码遇到大数据量的话就很慢了. 用这个生成Xml文件的话,即使数据量很大,也很快 private vo ...

  3. ReportViewer,RDLC 报表开发之个性化样式

    原文:ReportViewer,RDLC 报表开发之个性化样式 报表开发中,客户对样式提出了要求: 1.工具栏上显示每页条数 2.只导出Excel,不需要下拉菜单. 3.报表上显示的图表,分页时,每页 ...

  4. extjs grid 复选框选择事件

    开发中需求是统计选择的行数,所以要监控checkbox的选择事件包括表头的全选事件 遇到的问题就不赘述了 方案是监控grid的复选框和行加载时绑定事件 baseView: DBEN.controls. ...

  5. 使用网盘(Dropbox/Google Drive)同步Git仓库

    还在使用老掉牙的U盘搬运代码(文件)的方式,从一台机器上复制后,粘贴到另一台机器上?太Out了.使用Github 倒是一个非常不错的替代方法.但无论是基于什么理由都有可能不想把代码公开(毕竟Githu ...

  6. Qt4.7.4下单独编译QtWebkit

    最近编译出了Qt4.7.4的嵌入式版本,但没有编译QtWebkit库.在编译一个使用Webkit的工程时出错,而根据工程的需要,要单独编译QtWebkit库.    由于不想再次编译整个的Qt库,于是 ...

  7. 网络软件,BA File,Disk,Photo,BackupTools等等(Mac版)

    Auto FTP Manager 6.01Crossworld CrossFTP Enterprise v1.97.7 http://www.airexplorer.net/en/index.phpC ...

  8. “多团队大规模”开发模式 - 基于SAP HANA平台的多团队产品研发

    应用SAP HANA “官方”开发模式的伙伴们在转到“多团队大规模”开发模式时会遇到各式各样的心理不适应的状况,各种纠结.比如GIT Repository和HANA Repository冲突什么的. ...

  9. ansible(一)

    一.目的 代码发布系统 二.准备工作:干净的虚拟机准备4个 准备一个虚拟机后克隆出另外三个,注意,克隆前要将虚拟机关机 三.可以用来代码发布的工具 puppet ansible slatstack 四 ...

  10. JPA 报错解决方案 com.microsoft.sqlserver.jdbc.SQLServerException: Cannot insert explicit value for identity column in table 'test_db' when IDENTITY_INSERT is set to OFF.

    这种错误插入数据时就是hibernate的自增长字段生成规则应该用native 在字段前加入注解 @GeneratedValue(generator="generator") @G ...