.Net Core 跨平台:一個簡單程序的多平台(windows、Linux、osx)發布
.Net Core 3.0 已於2019年9月23日發布了,包含了一些新特性,具體參見Announcing .NET Core 3.0
.NET Core是一個跨平台,高性能,開放源代碼框架,用於構建現代的,基於雲的,Internet連接的應用程序框架,其具有一下優點和特點:
跨平台:.NET Framework應用程序僅在Windows平台上運行,而.NET Core應用程序可以在Windows平台上開發並跨Windows,macOS或Linux等不同平台運行。 ASP.NET 4.x應用程序只能托管在IIS上,而ASP.NET Core應用程序可以托管在IIS,Apache,Docker或您自己的進程中的自托管中。 從開發的角度來看,可以使用Visual Studio或Visual Studio Code來構建.NET Core應用程序。開發者可以使用第三方編輯器,例如Sublime。
為MVC和Web API統一編程模型:通過ASP.NET Core,我們使用相同的統一編程模型來創建MVC樣式的Web應用程序和ASP.NET Web API。 在這兩種情況下,我們創建的Controller都從相同的Controller基類繼承,並返回IActionResult。 顧名思義,IActionResult是一個接口,它具有多種實現。 ViewResult和JsonResult只是實現IActionResult接口的內置結果類型的兩個示例。 因此,對於Web API,控制器返回JsonResult,對於MVC風格的Web應用程序,控制器返回ViewResult。 他們的本質是一樣的,控制器返回的ViewResult可以認為是Content-Type不同而已。MVC和Web API的一些命名空間也合並了。
內置依賴注入:.NET Core內置依賴注入。.NET Core 跨平台只是一個目的之一,其框架重寫了,后續你會發現很多組件、第三方庫的使用都是通過依賴注入的。官方教程實例也基本是依賴注入貫穿全文。
易於測試:通過內置的依賴項注入和用於創建Web應用程序和Web API的統一編程模型,可以輕松進行ASP.NET Core應用程序的單元測試。
開源:.NET Core是完全開源的,並且由.NET團隊與廣大的開源開發者社區合作積極開發。 因此,隨着ASP.NET核心背后的廣大社區正在提出改進它並幫助修復錯誤和問題的方法,它不斷發展。 這意味着我們擁有更安全,質量更高的軟件。Github地址:https://github.com/dotnet/core
模塊化HTTP請求管道:ASP.NET Core通過中間件組件提供模塊化。 在ASP.NET Core中,我們使用中間件組件來組成請求和響應管道。 它包括一組豐富的內置中間件組件。 我們還可以編寫我們自己的自定義中間件組件。
下面來以一個簡單的Hello World應用程序發布到windows、Linux、osx三個平台作為實例。
開發環境可以選擇windows或者osx,為了演示在沒有安裝.net core環境的osx下運行.net core應用程序,osx我先不安裝visual studio.
Windows 環境使用Visual Studio 2019 ,下載地址https://visualstudio.microsoft.com/zh-hans/
OSX 環境使用Visual Studio for Mac,下載地址:https://visualstudio.microsoft.com/zh-hans/vs/mac/
新建控制台應用(.NET Core),如下圖所示:
項目模板自動生成一個Hello World控制台程序,為了演示多平台,將代碼稍作修改:
在解決方案的項目上右鍵菜單選擇發布:
配置說明:
部署模式分為獨立部署和框架依賴,獨立部署可以在目標平台沒有安裝.netcore環境下運行;框架依賴需要在目標平台安裝.netcore運行環境,而且要考慮版本問題。
目標運行時即發布平台,win-x86、win-x64、win-arm、Linux -86、Linux-x64、osx-x64等
這里要分別發布三個平台,分別建立三個目標平台對應的配置:
編輯HelloConsoleApp.csproj工程文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<PublishTrimmed>true</PublishTrimmed>
<PublishReadyToRun>false</PublishReadyToRun>
<PublishSingleFile>true</PublishSingleFile>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
</PropertyGroup>
</Project>
選中對應的配置文件,依次發布,發布目錄如下
先看Windows的
可以看到,發布后一個單獨的可執行文件,25.8M !
遙想N年前,很多人就想:
- 如何把.net程序打包到沒有安裝.net運行環境的Windows運行?
- 如何把依賴的一堆dll打包成一個可執行文件?
現在,這些問題統統已經解決,不但如此,還能同一份代碼發布到Linux、OSX等其它OS運行!
上圖,Window下:
Linux 發布目錄也是一個可以獨立運行的可執行程序:
將其放到Linux系統運行:
輸出系統版本為Unix 4.15.0.29
Osx 環境下:
運行:
Osx 上面並沒有安裝.netcore
目標平台無需安裝.netcore運行環境。
至此,一個簡單的.netcore跨平台程序發布示例完成。