基于Serilog的WPF应用MSI安装后写SQL日志报空引用异常怎么办
根因说明
该空引用异常由Microsoft.Data.SqlClient v3.0.1的内部实现缺陷导致:在通过Visual Studio Installer Projects打包为MSI安装部署的场景下,SqlConnection实例化后访问内部属性(如State)、调用OpenAsync方法时会触发未处理空引用,该问题仅在特定打包部署场景复现,本地直接运行编译后的exe不会触发。
解决方案(已验证可行)
直接回退使用System.Data.SqlClient即可恢复正常,操作步骤如下:
- 卸载项目中引用的
Microsoft.Data.SqlClient v3.0.1NuGet包 - 确认
System.Data.SqlClient v4.8.3引用正常,你当前使用的Serilog.Sinks.MSSqlServer v5.6.1版本天然兼容该依赖,无需修改Serilog配置逻辑 - 重新生成MSI安装包即可,原有日志写入代码不需要做任何调整
补充参考
- 若必须使用
Microsoft.Data.SqlClient的新特性,可升级到v4.0及以上版本,该缺陷已在后续版本修复 - 排查Serilog Sink相关异常时优先开启自日志,可快速定位异常来源,避免无效排查业务逻辑
- 涉及MSI打包部署的依赖问题,可直接附加调试安装后的程序,快速定位运行时异常点
内容的提问来源于stack exchange,提问作者Fletcher Johnson
相关产品推荐
相关产品推荐

