Serilog.Settings.Configuration作为NuGet包引用时不生效问题咨询
问题原因
你遇到的报错是因为Serilog.Settings.Configuration v3.2.0 正式版尚未支持「嵌套配置对象实例化接口类型参数」的特性。你本地作为项目引用的dev分支源码属于更高版本的开发版本,已经加入了对ITextFormatter这类接口参数通过嵌套配置(指定type和构造参数)实例化的支持,所以项目引用时可以正常运行,3.2.0正式版没有对应功能所以抛出无法实例化接口的错误。
解决方案
- 方案1:升级Serilog.Settings.Configuration到3.3.0及以上版本(推荐)
直接修改项目文件的包引用版本即可,3.3.0及以上版本原生支持你当前的appsettings.json写法,兼容.NET 5和你当前使用的其他Serilog组件版本:
升级后如果仍有异常,可以清理本地NuGet缓存后重新还原项目,确保新版本的包被正确加载。<PackageReference Include="Serilog.Settings.Configuration" Version="3.4.0" /> - 方案2:保持3.2.0版本,调整配置或代码写法
如果你必须使用3.2.0版本,可以选择两种修改方式:- 把ExpressionTemplate的配置移到代码中,不再通过appsettings.json配置formatter参数
- 改用无构造参数的格式化器,用字符串形式指定类型,例如:
注意3.2.0不支持传入构造参数,所以无法直接在配置中指定自定义的ExpressionTemplate模板内容。"formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact"
内容的提问来源于stack exchange,提问作者walruz
相关产品推荐
相关产品推荐

