架構師_程序員

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

查看: 210|回復: 1

[.NET Core] .NET Core 新功能發布單文件可執行文件

[復制鏈接]
跳轉到指定樓層
樓主
發表于 2019-9-28 16:38:47
在前幾天,微軟發布了 .NET Core 3.0 ,最大的增強功能之一是對 Windows 桌面應用程序的支持(僅限 Windows)。 通過使用 .NET Core 3.0 SDK Windows 桌面組件,可移植 Windows 窗體和 Windows Presentation Foundation (WPF) 應用程序。 明確地說,只有在 Windows 上才支持和包含 Windows 桌面組件。

SDK下載地址:https://dotnet.microsoft.com/download/dotnet-core/3.0

關于 .NET Core 功能介紹鏈接:

https://docs.microsoft.com/zh-cn/dotnet/core/whats-new/dotnet-core-3-0
https://devblogs.microsoft.com/aspnet/asp-net-core-and-blazor-updates-in-net-core-3-0/

特性包括如下:

  • 使用 C# 構建富交互客戶端 Web 應用。
  • 使用 gRPC 創建高性能后端服務。
  • SignalR 現在支持自動重連接和客戶端到服務器(client-to-server)流。
  • 使用 OpenAPI 文檔為 Web API 生成強類型的客戶端代碼。
  • 通過框架集成了端點路由。
  • Kestrel 默認啟用 HTTP/2。
  • 集成 Web API 和單頁應用身份驗證支持。
  • 支持證書和 Kerberos 身份驗證。
  • 集成新的 System.Text.Json 序列化器。
  • 新的通用主機設置了常見的托管服務,例如依賴項注入、配置和日志。
  • 用于構建長期服務的新 Worker Service 模板。
  • 為每秒請求、總請求、當前請求和失敗請求創建了新的 EventCounters。
  • 現在會將托管在 IIS 中的啟動錯誤報告給 Windows Event Log。
  • 請求管道集成 System.IO.Pipelines。
  • 整個技術棧的性能改進。

我們用 vs 2019 新建一個 .net core 3.0 的控制臺項目,如下圖:



引用 Newtonsoft.Json 包,隨便寫幾行代碼,代碼如下:

  1. using System;
  2. using static Newtonsoft.Json.JsonConvert;

  3. namespace demo1
  4. {
  5.     class Program
  6.     {
  7.         static void Main(string[] args)
  8.         {
  9.             var user = new UserInfo()
  10.             {
  11.                 Name = "架構師",
  12.                 Blog = "http://www.igjfbb.icu"
  13.             };
  14.             var json = SerializeObject(user);
  15.             Console.WriteLine(json);
  16.             Console.ReadKey();
  17.         }
  18.     }

  19.     public class UserInfo
  20.     {
  21.         public string Name { get; set; }

  22.         public string Blog { get; set; }
  23.     }
  24. }
復制代碼

我們右擊vs重新生成下,然后打開項目的bin目錄,發現會生成幾個文件,其中包含:demo1.exe 和 Newtonsoft.Json.dll 文件。



發布單文件可執行文件

方式一:

在項目目錄下執行如下命令:

  1. dotnet publish -r win10-x64 /p:PublishSingleFile=true
復制代碼


我們打開 C:\Users\itsvse_pc\source\repos\demo1\demo1\bin\Debug\netcoreapp3.0\win10-x64 文件夾,會發現生成了很多dll文件還有一個publish文件夾。

進入publish文件夾,查看 demo1.exe 的大小有 66M,和文件夾外所有的文件大小一樣,如下圖:



生成的單個執行文件,其實已經包含程序所執行需要的環境,不需要目標電腦在安裝sdk了,弊端就是文件大小會變得非常大。

方式二:

右擊vs編輯項目文件,增加PublishSingleFile節點配置,代碼如下:

  1. <Project Sdk="Microsoft.NET.Sdk">

  2.   <PropertyGroup>
  3.     <RuntimeIdentifier>win10-x64</RuntimeIdentifier>
  4.     <PublishSingleFile>true</PublishSingleFile>
  5.     <OutputType>Exe</OutputType>
  6.     <TargetFramework>netcoreapp3.0</TargetFramework>
  7.   </PropertyGroup>

  8.   <ItemGroup>
  9.     <PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
  10.   </ItemGroup>

  11. </Project>
復制代碼
然后右擊點擊“發布”按鈕即可。


程序集鏈接

.NET core 3.0 SDK 隨附了一種工具,可以通過分析 IL 并剪裁未使用的程序集來減小應用的大小。

自包含應用包括運行代碼所需的所有內容,而無需在主計算機上安裝 .NET。 但是,很多時候應用只需要一小部分框架即可運行,并且可以刪除其他未使用的庫。

.NET Core 現在包含一個設置,將使用 IL 鏈接器工具掃描應用的 IL。 此工具將檢測哪些代碼是必需的,然后剪裁未使用的庫。 此工具可以顯著減少某些應用的部署大小。

要啟用此工具,請使用項目中的 <PublishTrimmed> 設置并發布自包含應用:

  1. <PropertyGroup>
  2.   <PublishTrimmed>true</PublishTrimmed>
  3. </PropertyGroup>
復制代碼
.NET Core CLI
  1. dotnet publish -r <rid> -c Release
復制代碼


我們剛才生成 66M 的文件,增加配置后,變成了35M ,減少了 30M 的占用

請務必考慮到使用反射或相關動態功能的應用程序或框架(包括 ASP.NET Core 和 WPF)通常會在剪裁時損壞發生此損壞是因為鏈接器不知道此動態行為,并且不能確定反射需要哪些框架類型。 可配置 IL 鏈接器工具以發現這種情況。

最重要的是,剪裁后務必對應用進行測試


(完)






上一篇:解決ajax無法給外部變量賦值
下一篇:C語言這么厲害,它自身又是用什么語言寫的?
帖子永久地址: 

架構師_程序員 - 論壇版權1、本主題所有言論和圖片純屬會員個人意見,與本論壇立場無關
2、本站所有主題由該帖子作者發表,該帖子作者與架構師_程序員享有帖子相關版權
3、其他單位或個人使用、轉載或引用本文時必須同時征得該帖子作者和架構師_程序員的同意
4、帖子作者須承擔一切因本文發表而直接或間接導致的民事或刑事法律責任
5、本帖部分內容轉載自其它媒體,但并不代表本站贊同其觀點和對其真實性負責
6、如本帖侵犯到任何版權問題,請立即告知本站,本站將及時予與刪除并致以最深的歉意
7、架構師_程序員管理員和版主有權不事先通知發貼者而刪除本文

碼農網,只發表在實踐過程中,遇到的技術難題,不誤導他人。
沙發
發表于 2019-9-29 09:30:44

感謝樓主分享
碼農網,只發表在實踐過程中,遇到的技術難題,不誤導他人。
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則

免責聲明:
碼農網所發布的一切軟件、編程資料或者文章僅限用于學習和研究目的;不得將上述內容用于商業或者非法用途,否則,一切后果請用戶自負。本站信息來自網絡,版權爭議與本站無關。您必須在下載后的24個小時之內,從您的電腦中徹底刪除上述內容。如果您喜歡該程序,請支持正版軟件,購買注冊,得到更好的正版服務。

Mail To:help@itsvse.com

QQ|Archiver|手機版|小黑屋|架構師 ( 魯ICP備14021824號-2 )|網站地圖

GMT+8, 2019-10-20 23:37

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表
北京赛车pk10直播皇家彩世界