OWIN自托管Windows服务部署到Windows Server时启动报FileNotFoundException异常
异常原因分析
- 核心依赖缺失:OWIN自托管运行必须依赖
Microsoft.Owin.Host.HttpListener程序集,多数场景下本地开发环境通过Nuget正确引用了该包,但部署时该程序集未被复制到服务运行目录。Windows 10环境如果有开发工具或其他应用共享了该程序集即可正常运行,而干净的服务器环境没有该共享程序集就会抛出文件找不到异常。 - .NET Framework版本不匹配:你的应用基于.NET Framework v4.0.30319编译,Windows Server 2012R2/2018默认的.NET Framework版本可能不满足运行要求,或者服务器未启用对应版本的.NET Framework功能。
- 项目生成配置问题:如果你的项目设置了平台目标为x86/x64,但服务器系统架构不匹配,或者部分依赖程序集的架构和主程序不一致,也会触发加载程序集失败的FileNotFoundException。
可行解决方案
方案1:确认核心依赖复制到运行目录
- 打开项目Nuget包管理,确认已安装
Microsoft.Owin.Host.HttpListener包 - 在项目引用列表中找到
Microsoft.Owin.Host.HttpListener,右键属性,将「复制本地」属性设置为True - 重新发布项目,确认输出目录中存在
Microsoft.Owin.Host.HttpListener.dll文件
方案2:检查服务器.NET Framework安装情况
- 在服务器上打开「控制面板-程序和功能-启用或关闭Windows功能」,确认.NET Framework 4.x(建议安装4.7.2及以上兼容版本)功能已完整启用
- 如果是Server Core环境,可以通过DISM命令安装对应版本的.NET Framework功能
方案3:统一项目生成平台
- 打开项目属性-生成页,将平台目标设置为Any CPU,取消「首选32位」选项
- 重新编译发布后再部署到服务器
如果以上方案均未解决问题,可以使用Process Monitor工具抓取服务进程运行时的文件加载日志,定位具体缺失的文件。
内容的提问来源于stack exchange,提问作者Luis Ferrer
相关产品推荐
相关产品推荐

