【譯】.NET Core 3.0 發佈小尺寸 self-contained 單體可執行程式

来源:https://www.cnblogs.com/jRoger/archive/2019/07/18/create-trimmed-self-contained-executable-in-net-core-3-0.html
-Advertisement-
Play Games

.NET Core 提供的發佈應用程式選項 self-contained 是共用應用程式的好方法,因為應用程式的發佈目錄包含所有組件、運行時和框架。您只需要告訴使用者應用程式的入口 exe 文件,就可以使程式運行起來,而不必擔心目標電腦上是否存在.NET Core 運行時和應用框架。目前 .NET ...


.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/

譯者註: 

參考鏈接:


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 首先要引用這個服務,http://www.webxml.com.cn/Webservices/WeatherWebService.asmx 添加服務和引用 >轉到 >高級 >添加WEB應用 >添加引用 到此OK。 1個text,1個button,2個lable private void btn_se ...
  • 嘗試了一天,嘗試了各種方法,一下方法最直接方便. ...
  • Swagger實例分享(VS+WebApi+Swashbuckle) Swagger可以很方便的為發佈的WebApi自動生成優雅的文檔,不需額外自己編寫,只需為項目配置好,是一個很好用的工具,做一個簡單的Demo和大家分享一下~ 1、使用HuGet導入Swashbuckle包 2、修改Swagger ...
  • .NET Core CSharp 初級篇 1 2 本節內容迴圈與判斷 迴圈 迴圈是一個在任何語言都是極為重要的語法,它可以用於很多東西,例如迭代數組等等。在C 中,語法層面的迴圈有: for , foreach , while , do goto 五種。迴圈你可以理解為當某條件滿足時,重覆的執行一段 ...
  • .NET Core CSharp 初級篇 1 3 本節內容為面向對象初級教程 類 簡介 面向對象是整個C 中最核心最有特色的一個模塊了,它很好的詮釋了程式與現實世界的聯繫。 面向對象的三大特征:繼承、多態、封裝;繼承的含義可以理解為集合中的包含關係,例如人類屬於動物類的一個分支,這就是一種繼承。多態 ...
  • 平時收集資料需要使用各類網盤搜索工具,在此特作一個收集連接不定期更新失效連接。按日常使用度來排行 胖次網盤搜索引擎 http://www.panc.cc 雲搜一下就能找到:http://sou.wolfbe.com 特百度 http://www.tebaidu.com 去轉盤網 http://www ...
  • 1、什麼是單元測試 2、單元測試的好處 (1)協助程式員儘快找到代碼中bug的具體位置 (2)能夠讓程式員對自己的程式更有自信 (3)能夠讓程式員在提交項目之前就將代碼變的更加的強壯 (4)能夠協助程式員更好的進行開發 (5)能夠向其他的程式員展示你寫的程式該如何調用 (6)能夠讓項目主管更瞭解系統 ...
  • (視頻)Windows平臺下的IIS進行負載均衡。IIS中的這種實現方式成為APR,所謂的“Web Fram”,就是將應用程式部署到多台伺服器,從而達到分擔流量的作用。 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...