1. 程式人生 > >.Net Core 跨平臺:一個簡單程式的多平臺(windows、Linux、osx)釋出

.Net Core 跨平臺:一個簡單程式的多平臺(windows、Linux、osx)釋出

.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年前,很多人就想:

  1. 如何把.net程式打包到沒有安裝.net執行環境的Windows執行?
  2. 如何把依賴的一堆dll打包成一個可執行檔案?

現在,這些問題統統已經解決,不但如此,還能同一份程式碼釋出到Linux、OSX等其它OS執行!

 

上圖,Window下:

 

 

 

 

Linux 釋出目錄也是一個可以獨立執行的可執行程式:

 

 

 

 

將其放到Linux系統執行:

 

 

 

 

 

輸出系統版本為Unix 4.15.0.29

 

 

Osx 環境下:

 

 

 

 

執行:

 

 

 

 

 

 

Osx 上面並沒有安裝.netcore

 

 

 

 

目標平臺無需安裝.netcore執行環境。

至此,一個簡單的.netcore跨平臺程式釋出示例完成。