運行環境 操作系統 開發工具 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
