.NET 4.8升级Serilog至4.0后遇程序集加载错误求助
你遇到的Could not load file or assembly 'Serilog, Version=2.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10' or one of its dependencies.错误并非Serilog 4.0的Bug,核心原因是依赖版本不兼容或缺少程序集绑定重定向,以下是具体解决步骤:
同步升级所有Serilog相关依赖包
项目中如果使用了Serilog的衍生组件(如Serilog.Sinks.Console、Serilog.Enrichers.Thread等),旧版本的这类组件可能硬依赖Serilog 2.x版本,导致加载冲突。需将所有Serilog家族的NuGet包升级到兼容4.0的版本。添加程序集绑定重定向
在项目的App.config(桌面应用)或Web.config(Web应用)的runtime/assemblyBinding节点下添加重定向配置,强制应用使用4.0版本的Serilog程序集:<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Serilog" publicKeyToken="24c2f752a8e58a10" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>清理项目并重建
删除项目目录下的bin和obj文件夹,清理NuGet本地缓存,然后重新编译项目,避免残留的旧版本程序集引发冲突。排查间接依赖
使用NuGet包管理器的“查看依赖项”功能,或执行dotnet list package --include-transitive命令(若使用.NET CLI),检查是否有第三方包间接引用了旧版Serilog,找到后升级对应包或联系包作者更新依赖。
Serilog 4.0官方支持.NET Framework 4.6.2及以上版本(包含4.8),只要确保整个依赖链版本兼容,即可正常使用,无需一直停留在3.1.1版本。
内容的提问来源于stack exchange,提问作者Evald80

