這周,心情來潮,想把 Aries 開發框架 和 Taurus 開發框架 給部署到Linux上,因而開始折騰了。html
通過重重非人的坑,終於完成了任務:git
Aries on CentOS7:mvc.aries.cyqdata.comgithub
Taurus on CentOS7:mvc.taurus.cyqdata.comweb
不過在發佈的過程當中,發現有大堆共同的dll(100多個,20多M):json
看見一大堆這些dll,感受很影響視覺,並且多個項目就要上傳多份,非常麻煩。mvc
因而研究了一下,能不能把這些和項目的文件分開,獨立到一個指定的目錄中去。app
爲何要研究,由於網上根本搜不到啊,我X,這.net core 都出這麼多年了,就沒人有點潔癖,把這事給解決而後寫篇文章麼!框架
一、本人機器早期裝的是VS2017版本,發佈版本時,沒有「部署模式」選項。測試
二、後來升級了一下,發現版本選項裏有「部署模式」選項,裏面有框架依賴和獨立兩種,因而看了下相關說明:spa
能夠爲 .NET Core 應用程序建立三種部署:
依賴框架的部署。 顧名思義,依賴框架的部署 (FDD) 依賴目標系統上存在共享系統級版本的 .NET Core。 因爲已存在 .NET Core,所以應用在 .NET Core 安裝程序間也是可移植的。 應用僅包含其本身的代碼和任何位於 .NET Core 庫外的第三方依賴項。 FDD 包含可經過在命令行中使用 dotnet 實用程序啓動的 .dll 文件。 例如,dotnet app.dll
就能夠運行一個名爲 app
的應用程序。
獨立部署。 與 FDD 不一樣,獨立部署 (SCD) 不依賴目標系統上存在的共享組件。 全部組件(包括 .NET Core 庫和 .NET Core 運行時)都包含在應用程序中,而且獨立於其餘 .NET Core 應用程序。 SCD 包括一個可執行文件(如 Windows 平臺上名爲 app
的應用程序的 app.exe),它是特定於平臺的 .NET Core 主機的重命名版本,還包括一個 .dll 文件(如 app.dll),而它是實際的應用程序。
依賴框架的可執行文件。 生成在目標平臺上運行的可執行文件。 相似於 FDD,依賴框架的可執行文件 (FDE) 是特定於平臺的,而不是自包含的。 這些部署的運行仍依賴於現有的 .NET Core 共享系統級版本。 與 SCD 不一樣,應用僅包含代碼和任何位於 .NET Core 庫外的第三方依賴項。FDE 生成在目標平臺上運行的可執行文件。
通過研究測試,無論哪一種方式,發佈後,仍是有一大堆Microsoft.XXXX.dll。
而後認真看仔細後發現,FDD部署,也是不處理依賴第三方依賴項的。
你連Microsoft和System打頭的都叫第三方依賴項,哥也沒辦法了。
後來想到配置文件:*.runtimeconfig.json,感受這裏應該能折騰點什麼。
{ "runtimeOptions": { "tfm": "netcoreapp2.0", "framework": { "name": "Microsoft.NETCore.App", "version": "2.0.0" }, "configProperties": { "System.GC.Server": true } } }
百了和runtimeconfig.json相關的文章,發現一篇翻譯自老外的文章:
https://www.cnblogs.com/lwqlun/p/9704702.html
按着關鍵說明,覺得找到了春天:
因而在:additionalProbingPaths 這個屬性上陷入了不歸路,特別是packages這個起名,讓我一路覺得它和第三方依賴包有關。
結果卻無論怎麼折騰,都悲催了。
最後只能看原文,而後看源碼是怎麼加載配置文件的。
配置文件加載的源碼:https://github.com/dotnet/core-setup/blob/v2.1.3/src/corehost/cli/fxr/fx_muxer.cpp#L464
結果一堆C++,看的好不頭痛,仍是暫時放棄了,感受情緒未到。
休息了一會,又從新把文章給仔細看了一下,開始關注了一下*.deps.json,
畢竟這個文件,默認是不用上傳的,因此很天然性的被忽略了。
不過當我把它上傳上去的時候,發現它被加載,並且,報錯了。
感受找到了方向:
如今仔細一看,deps應該depends依賴的簡寫,用於處理依賴包配置的。
Linux下的web目錄是這樣的:
因而,把*.deps.json裏面 lib/開頭的路徑,所有給換成 /home/web/package ,而後上傳,結果,OK了。
最後的部署目錄,就剩下這麼幹淨了:
雖然最後定位到deps.json能夠處理這個事,不過默認產生的deps.json東西有點多,要替換的路徑也有點多。
估計再研究一下,應該還能夠簡化一下這個工做。