很多.NET開發者編譯好的的程式,釋出到另外一臺電腦的時候,往往都不能執行,而是需要安裝執行時。這個大多數人都知道,直接去執行時官網下載對應版本的安裝包即可。比如我用了6.0,那麼選擇對應架構的版本下載即可。然後在目標機器上安裝這個包,就可以執行我們的.NET程式了。
這樣操作起來還是有點麻煩,有沒有辦法把.NET執行時的dll摘出來,和我們的程式放在一起,這樣程式釋出到目標機器,不就直接可以執行了。答案是肯定的,微軟官網提供了非常詳細的釋出說明:將應用釋出為獨立應用,將生成特定於平臺的可執行檔案。 輸出釋出資料夾包含應用的所有元件,包括 .NET 庫和目標執行時。 應用獨立於其他 .NET 應用,且不使用本地安裝的共享執行時。 應用的使用者無需下載和安裝 .NET。我做了一個表格,大概說明一下幾種方式的優缺點,這樣看起來更加直觀。
釋出依賴於框架的應用 | 釋出獨立應用 | 使用 ReadyToRun 映像釋出 | |
---|---|---|---|
是否依賴.NET執行時 | 是 | 否 | 否 |
應用大小 | 小 | 大 | 大 |
總體來說,就是釋出獨立應用的時候,VS會自動幫你把.Net runtime的dll摘出來,放在exe根目錄publish資料夾,這樣直接copy這個資料夾即可,也算是用磁碟空間換操作時間的最優辦法了。
那麼如何釋出獨立應用呢?
1.命令列
點選“檢視”--—“終端”,或者用快捷鍵Ctrl+~,在終端中輸入dotnet publish -r win-x64
,如果你想釋出面向MacOS的包,只需要輸入dotnet publish -r osx-x64
,只需要更換最後的一個引數即可。那麼問題來了,最後一個引數是什麼樣的標準,嗯,你可以參考.NET RID 目錄。這個裡面有各種平臺的架構定義,查詢你需要的架構替換即可。
釋出完成後,去終端提示的目錄即可找到需要的獨立應用。
2.UI操作
如果你不想用命令列,也可以使用介面操作,這樣就不需要查詢剛才的架構定義表。
找到解決方案,右擊找到“釋出”。
選擇釋出到本地資料夾。當然你也可以釋出到Azure雲或者Docker,畢竟.NET是跨平臺的。
再次選擇本地
選擇釋出目錄,支援區域網地址
點選完成後,先不要急著釋出。點選“更多操作”,編輯一下配置
這裡有非常詳細的配置選擇,以及是否釋出單個檔案或者使用ReadyToRun編譯,來縮短程式啟動時間。儲存後,點選發布即可。
釋出完成後,exe目錄多了一大堆dll,磁碟空間也增加了100多MB的大小。如果你覺得這樣太雜亂了,可以在上一個介面那裡,選擇“生成單個檔案”,資料夾就瞬間清淨了。
本文參考微軟官方文件:應用程式釋出