.NET Framework 4.8类库System.Diagnostics.DiagnosticSource版本绑定错误求助
解决System.Diagnostics.DiagnosticSource版本绑定冲突问题(.NET Framework 4.8 + Azure.Storage.Blobs 12.21.1)
方案1:强制类库生成绑定重定向输出
编辑类库的.csproj文件,添加以下配置后重新编译:
<PropertyGroup> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> </PropertyGroup>
编译后会自动生成包含绑定重定向规则的[类库名称].dll.config文件,将该文件与类库DLL放在同一目录,确保加载时能读取到重定向配置。
方案2:代码层面动态处理程序集绑定
在类库的初始化逻辑中添加程序集解析事件,强制加载正确版本的DLL:
using System; using System.Linq; using System.Reflection; public static class DiagnosticSourceResolver { public static void Setup() { AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => { var assemblyName = new AssemblyName(args.Name); if (assemblyName.Name.Equals("System.Diagnostics.DiagnosticSource", StringComparison.OrdinalIgnoreCase)) { // 优先加载已加载的版本,或指定路径加载6.0.0.1版本 var loadedAssembly = AppDomain.CurrentDomain.GetAssemblies() .FirstOrDefault(a => a.GetName().Name == "System.Diagnostics.DiagnosticSource"); return loadedAssembly ?? Assembly.LoadFrom("System.Diagnostics.DiagnosticSource.dll"); } return null; }; } }
在类库被调用的入口处执行DiagnosticSourceResolver.Setup();,覆盖LoadFrom上下文下的绑定逻辑。
方案3:确保宿主程序配置包含正确绑定重定向
如果类库被其他.NET Framework应用(如控制台、WinForms程序)引用,必须修改宿主程序的app.config/web.config,添加绑定重定向规则:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-6.0.0.1" newVersion="6.0.0.1" /> </dependentAssembly> </assemblyBinding> </runtime>
类库自身的app.config不会被自动加载,宿主程序的配置才是绑定重定向的最终生效来源。
方案4:重新安装NuGet包修复配置
打开NuGet包管理器控制台,执行以下命令重新安装相关包,自动修复绑定重定向配置:
Update-Package -reinstall System.Diagnostics.DiagnosticSource Update-Package -reinstall Azure.Core Update-Package -reinstall Azure.Storage.Blobs
内容的提问来源于stack exchange,提问作者AKCoder
相关产品推荐
相关产品推荐

