運行環境 操作系統 開發工具 frameworks .Net Core SDK 版本 托管運行 本地 Win10 VS 2015 net461 2.1.401 Kestrel 伺服器 WIn Server 2012 1.0.0-preview2-003121 IIS 開發做瞭如下相關修改: 把 Ap ...
運行環境 操作系統 開發工具 frameworks .Net Core SDK 版本 托管運行
本地 Win10 VS 2015 net461 2.1.401 Kestrel
伺服器 WIn Server 2012 --- ----- 1.0.0-preview2-003121 IIS
開發做瞭如下相關修改:
把 App.config 全部配置全部移植到 appsettings.json。讀取配置的文件同時從一個項目到另外一個項目,並由此升級了 Nuget 相關的包。
出現問題:
本地用開發工具可以正常調試編譯發佈, 到服務出現程式清單與載入的dll 版本不一致(Microsoft.Extensions.Configuration.Abstractions.dll 為1.0.0.0, 配置需要載入 1.1.0.0)
嘗試解決:
用本地的新版本替換伺服器舊版本
出現新問題: ASP .NET Core HTTP Error 502.5 – Process Failure
嘗試解決: 升級服務 sdk 版本,錯誤依舊,安裝 .NET Core Runtime & Hosting Bundle 對應的版本,錯誤依舊,修改web.cofig modules="AspNetCoreModule" 為 modules="AspNetCoreModule2" 提示找不到模塊
還原 Microsoft.Extensions.Configuration.Abstractions 版本依舊無法啟動, 只有刪除升級的 sdk 與runtime,但是問題依舊。
最終只得在本地開發環境, 通過 Nuget 管理程式包降級 Microsoft.Extensions.Configuration.Abstractions 的版本後重新發佈,發佈程式在伺服器才可以正常運行~~~~
本以為大功告成,然而,本地直接運行程式調試出現問題:
找到的程式集版本與清單定義不符
查看本地 debug 文件下麵 exe.cofing 配置,確實指定了 1.1.0.0 版本。 手動修改後,運行程式 ,還是出現錯誤。
這次仔細查看異常詳情:
=== 預綁定狀態信息 ===
日誌: DisplayName = Microsoft.Extensions.Primitives, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
(Fully-specified)
日誌: Appbase = file:///E:/xxx/bin/Debug/net461/win7-x64/
日誌: 初始 PrivatePath = NULL
調用程式集: Microsoft.Extensions.Configuration.Abstractions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60。
===
日誌: 此綁定從 default 載入上下文開始。
日誌: 正在使用應用程式配置文件: E:\xxx\bin\Debug\net461\win7-x64\Siyan.MessageService.Web.exe.Config
日誌: 使用主機配置文件:
日誌: 使用 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config 的電腦配置文件。
日誌: 在應用程式配置文件中找到重定向: 1.0.0.0 已重定向到 1.1.0.0。
日誌: 策略後引用: Microsoft.Extensions.Primitives, Version=1.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
日誌: 嘗試下載新的 URL file:///E:/xxx/bin/Debug/net461/win7-x64/Microsoft.Extensions.Primitives.DLL。
警告: 比較程式集名稱時發生不匹配: 次版本
錯誤: 未能完成程式集的安裝(hr = 0x80131040)。探測終止。
好像煥然大悟,覺得勝利唾手可得了。趕緊到本機配置文件(machine.config )查看,並沒有找到相關配置。清理解決方案,清理項目再次運行,問題還在,有點崩潰的感覺!
最後,只有出絕招了,直接強制刪除 exe.config 文件 ,再次生成, 運行調試,問題解決!!!
總結: 對.net core 項目部署發佈不熟悉,走了很多彎路,其實只需刪除本地 bin 目錄下麵 exe.config 文件重新生成即可,因為 vs 自動清理不會清理舊的此文件,造成新的改動無法同步,干擾問題原因查找與解決!
.Net Core 官方配置可查看:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.2