1. 程式人生 > >.net core win7和win10釋出的dll不同以及缺少相關dll檔案

.net core win7和win10釋出的dll不同以及缺少相關dll檔案

.NET Core 應用程式部署分為2中情況:

  • 依賴框架的部署。 顧名思義,依賴框架的部署 (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),而它是實際的應用程式。

有什麼區別呢,如上說所,說白了就是執行的伺服器是否安裝了相應的.net core 執行環境,還有一個就是釋出的檔案個數,不同的開發電腦系統,在釋出的時候,會根據自己的系統,生成不同的dll檔案,win7和win10的VS也會生成不一樣的釋出包。

問題:

最近遇到一個問題,就是同事的電腦環境是win10系統,而我的電腦是win7系統,最開始釋出應用程式包是用win10釋出的,使用依賴框架的部署打包,部署到windows server 2012 R2伺服器上,並且已安裝最新.net core sdk,通過IIS程式執行,部署執行成功。後期專案進行修改、需要重新發布,然後就用win7系統進行打包釋出,拷貝到伺服器,發現報錯:.NET Core 4.6.26814.03 X64 v4.0.0.0 | Microsoft.AspNetCore.Hosting version 2....

,應用程式無法啟動。

原因:

經過查詢,發現win7和win10生成的dll檔案不一樣,會依賴各自的系統執行環境,win7會缺少dll檔案,比如Microsoft.AspNetCore.Authentication.dll等,缺少了大概20多個檔案,如果單獨的部署在本機的win7系統,是可以執行,並不會報錯。

重新用win10開發環境打包釋出,應用程式就正常了。

那如何在win7開發環境釋出類似在win10系統的dll包呢?

解決方案:

部署模式:框架依賴

目標執行時:可移植

不要選擇win-x64,否則還是生成的檔案缺少相應的dll,選擇可移植就能夠在windows server 2012 R2部署執行,不需要自己的系統升級到win10。

當時嘗試著在.csproj專案檔案中新增屬性

 <PropertyGroup>
      <RuntimeIdentifiers>win10-x64;win8-x64</RuntimeIdentifiers>
 </PropertyGroup>

但是一樣沒有效果,因為釋出的時候是使用VS的釋出工具,所有在釋出的時候被更換了,除非選擇目標執行時一致即可。

我覺得可以通過cmd命令進行釋出,不使用vs的釋出,最後生成的應該和vs釋出一樣,有興趣的可以嘗試。