.NET Core 发布部署问题
运行环境 操作系统 开发工具 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 官方配置可查看:
推荐阅读
-
Linux服务器部署.Net Core笔记:目录
-
使用NuGet将我们的ASP.NET Core类库打包并将程序包(类库)发布到NuGet平台上进行管理
-
Linux下自动化部署ASP.NET CORE 3.1(Docker+Jenkins+Nginx)
-
[笔记]使用Docker部署.NET Core应用程序
-
Jexus 5.8.2正式发布! 为Asp.Net Core生产环境提供平台支持
-
ASP.NET学习笔记(五)-全球化部署,网站发布方法,AJAX使用,水晶报表使用,DropDownList,CheckBox全选
-
.NET Core跨平台部署于Docker(Centos)- 视频教程
-
.NET Core 2.0 Preview2 发布汇总
-
解决asp.net core在输出中文时乱码的问题
-
解析如何利用一个ASP.NET Core应用来发布静态文件