很多人想用DotNet開發軟體賺點外快子補添家用,但心裡總放不下心來,擔心被人破解了。好訊息是去年釋出的DotNet 5支援單檔案部署,不同於DotNet 3執行時將檔案釋放到臨時資料夾內,DotNet 5執行時將檔案釋放到記憶體,將安全係數提高了一個層次。
雖然DotNet 5釋出已有9個多月了,卻沒有一個系統性講單檔案部署的系列文章,所以我寫了這個系列。
一)網上幾種 .Net 5的單檔案部署方式
.Net 5下單檔案釋出的引數是/p:PublishSingleFile=true,它可以和其它幾個引數組合,有如下幾種單檔案釋出的方案。
1.1)依賴於Framework
dotnet publish -r win-x64 --self-contained=false /p:PublishSingleFile=true
1.2)不依賴Framework
dotnet publish -r win-x64 /p:PublishSingleFile=true
1.3)在GUI中配置單檔案釋出
在VS介面選擇釋出,配置如下:
點擊發布,生成如下:
二、以上單檔案部署的缺點:
第一種:過分依賴於Framework是最大問題。
第二、三種,不依賴於Framework,卻多出了幾個檔案aspnetcorev2_inprocess.dll、clrcompression.dll、clrjit.dll、coreclr.dll、mscordaccore.dll。
三種方案都未將wwwroot資料夾打包進EXE檔案內。(下篇《打包wwwroot資料夾》)
三、合併多出的dll檔案的方案。
3.1)在VS介面選擇釋出,配置後就會生成FolderProfile.pubxml
3.2)在Properties\ PublishProfiles\FolderProfile.pubxml檔案的PropertyGroup節點下新增以下程式碼
<IncludeNativeLibrariesForSelfExtract>True</IncludeNativeLibrariesForSelfExtract>
3.3)執行釋出,生成如下
命令列如下:
dotnet publish -c Release -p:PublishProfile=FolderProfile -o bin/Release-Win
-c 為 指定配置方案
-p:PublishProfile 指定 釋出配置檔案
-o 指定輸出目錄
雙擊後正常執行:
後記:
dotnet publish -c Release -p:PublishProfile=FolderProfile -o bin/Release-Win
這個命令列是很有用的,可以做成批處理,同時生成linux和windows版本的應用。