.NET Core是一個通用開發平台,由Microsoft和GitHub上的.NET社區共同維護。它是跨平台的, 支持Windows、macOS和Linux,並且可用於設備、雲和嵌入式/IoT方案。部署靈活:可以包含在應用或已安裝的並行用戶或計算機范圍中。
——摘自《ASP.NET Core跨平台開發從入門到實戰》
Java,Go等語言都是跨平台的,從事計算機行業的朋友,應該都知道。前兩天,一個從事測試的朋友,竟然不知道dotnet core是跨平台的。一句,.net跨平台的?這句話,我不知道該怎么回答。是他了解的太少,還是.Net的問題,貌似好多非.neter都不知道.net開源跨平台。我一向以德服人,只能用實踐去證明。
.net5已經發布正式版的了,之前玩的一直是預覽版的。應該是在2020年11月份發布的吧,這段時間一直有點忙,沒有太過關注。等閑下來再去玩一下
今天分享下Linux部署.Net Core3.1,本來想創建個.Net 5的項目,我電腦上的VS一直是.net5預覽版的。自己電腦上的vs沒有更新。今天只簡單記錄下怎么將dotnet core 項目部署到Linux。Linux搭配Docker部署才是主流趨勢,后續我再記錄如何使用Docker部署.Net Core項目
一、創建項目
我們的任務是.Net Core 部署到Linux,所以直接創建一個默認的MVC項目即可。不用dos創建了,直接使用visual studio創建吧。
如果直接發布項目的話,部署后Linux系統可以直接訪問,但是外網沒辦法訪問。解決方案有兩種,一種是Nginx進行反向代理。還有一種就是在Program中進行配置。這里使用更為簡單的后者。
在Program的CreateHostBuilder方法中添加webBuilder.UseUrls("http://*:5000");,端口可以自己定。
編譯下項目,快捷鍵,界面操作都行:
二、發布項目
發布的連接選擇“文件系統”
依賴框架的部署 (FDD)
定義:
框架依賴的部署:顧名思義,依賴框架的部署 (FDD) 依賴目標系統上存在共享系統級版本的 .NET Core。 由於已存在 .NET Core,因此應用在 .NET Core 安裝程序間也是可移植的。 應用僅包含其自己的代碼和任何位於 .NET Core 庫外的第三方依賴項。 FDD 包含可通過在命令行中使用 dotnet 實用程序啟動的 .dll 文件。 例如,dotnet app.dll 就可以運行一個名為 app 的應用程序。
對於 FDD,僅部署應用程序和第三方依賴項。 不需要部署 .NET Core,因為應用將使用目標系統上存在的 .NET Core 版本。 這是定目標到 .NET Core 的 .NET Core 和 ASP.NET Core 應用程序的默認部署模型。
優點:
不需要提前定義 .NET Core 應用將在其上運行的目標操作系統。 因為無論什么操作系統,.NET Core 的可執行文件和庫都是用通用的 PE 文件格式,因此,無論什么基礎操作系統,.NET Core 都可執行應用。部署包很小。 只需部署應用及其依賴項,而無需部署 .NET Core 本身。許多應用都可使用相同的dotnet core安裝,從而降低了主機系統上磁盤空間和內存使用量。
缺點:
僅當主機系統上已安裝你設為目標的 .NET Core 版本或更高版本時,應用才能運行。如果不了解將來版本,.NET Core 運行時和庫可能發生更改。 在極少數情況下,這可能會更改應用的行為。
獨立部署 (SCD)
定義:
獨立部署:與 FDD 不同,獨立部署 (SCD) 不依賴目標系統上存在的共享組件。 所有組件(包括 .NET Core 庫和 .NET Core 運行時)都包含在應用程序中,並且獨立於其他 .NET Core 應用程序。 SCD 包括一個可執行文件(如 Windows 平台上名為 app 的應用程序的 app.exe),它是特定於平台的 .NET Core 主機的重命名版本,還包括一個 .dll 文件(如 app.dll),而它是實際的應用程序。
對於獨立部署,可以部署應用和所需的第三方依賴項以及生成應用所使用的 .NET Core 版本。 創建 SCD 不包括各種平台上的 .NET Core 本機依賴項,因此運行應用前這些依賴項必須已存在。
NET Core 2.1 SDK(版本 2.1.300)開始,.NET Core 支持修補程序版本前滾。 在創建獨立部署時,.NET Core 工具會自動包含你的應用程序所指向的 .NET Core 版本的最新服務的運行時。 (最新服務的運行時包括安全修補程序和其他 bug 修復程序。)服務的運行時不需要存在於你的生成系統上;它會從 NuGet.org 自動下載。
DD 和 SCD 部署使用單獨的主機可執行文件,使你可以使用發布者簽名為 SCD 簽署主機可執行文件。
優點:
可以對與應用一起部署的 .NET Core 版本具有單獨的控制權。請放心,目標系統可以運行你的 .NET Core 應用,因為你提供的是應用將在其上運行的 .NET Core 版本。
缺點:
於 .NET Core 包含在部署包中,因此必須提前選擇為其生成部署包的目標平台,部署包相對較大,因為需要將 .NET Core 和應用及其第三方依賴項包括在內。
2.2依賴框架的部署過程
首先得在目標Linux系統安裝.Net Core
1.添加yum源
rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
2.升級所有包同時也升級軟件和系統內核(非必要)
yum update
3.安裝.net core
yum install dotnet-sdk-3.1
4.安裝完成后輸入.Net Core信息
dotnet -info
5.發布項目
點擊發布:
發布完成之后的項目結構:
發布完成后,我們會發現以上3個目錄都 TestCenterOS.dll,說明三個目錄都是可以進行部署的,但是有所區別的是publish目錄下包含wwwroot目錄,我們知道.Net Core項目的靜態文件是放在wwwroot目錄中的。所以雖然其他兩個目錄可以部署運行,但是會缺少靜態文件。所以我們選擇publish目錄進行部署。
6.創建一個dotnet目錄存放項目文件(自己喜歡放哪里都行)
mkdir testcoremvc
7.使用rz將我們打包好的部署文件上傳到剛才創建的目錄
下面是在linux上面的目錄
8.使用unzip 命令進行解壓(因為這里打的壓縮包是zip格式所以使用unzip命令)
9.使用cd命令進入解壓后的目錄中
10.啟動 項目
dotnet TestCoreMvc.dll
在瀏覽器中訪問即可:
我們的瀏覽器能正常訪問,部署成功。
獨立部署的方式一致,這里就不重復了。
Linux搭配Docker部署才是主流趨勢,后續我再記錄如何使用Docker部署.Net Core項目