求助:C#跨.NET版本项目运行时缺失SMDiagnostics程序集报错
针对你的ClientDesktop项目(net7.0-windows)启动时出现的System.IO.FileNotFoundException: 未能加载文件或程序集“SMDiagnostics, Version=4.0.0.0...”错误,可尝试以下解决方案:
安装WCF相关NuGet包
SMDiagnostics是WCF诊断组件的一部分,.NET 7中WCF组件不再默认包含,需手动安装对应NuGet包:
在ClientDesktop项目的NuGet包管理器中搜索并安装System.ServiceModel.Diagnostic包,安装完成后清理重建项目。添加程序集绑定重定向
在ClientDesktop项目的app.config文件中添加SMDiagnostics的绑定重定向配置,强制加载兼容版本:<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="SMDiagnostics" publicKeyToken="b77a5c561934e089" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>手动复制程序集到输出目录
从本地.NET Framework 4.8安装目录(通常为C:\Windows\Microsoft.NET\Framework\v4.0.30319)找到SMDiagnostics.dll,将其复制到ClientDesktop项目的bin/Debug/net7.0-windows(或Release对应目录)下,再启动项目。排查跨框架依赖冲突
由于你的服务端和DatabaseLib是.NET Framework 4.8,而ClientDesktop是.NET 7,可能存在跨框架依赖版本不兼容的情况:- 检查DatabaseLib中是否引用了WCF相关组件,确保ClientDesktop引用的对应包版本与之兼容;
- 移除ClientDesktop中不必要的旧框架引用,避免版本混淆。
启用程序集加载日志定位根因
使用.NET Framework的Fuslogvw.exe(程序集绑定查看器)查看SMDiagnostics加载失败的详细日志:- 以管理员身份运行
Fuslogvw.exe; - 在设置中勾选“启用程序集绑定失败日志”,选择“日志到磁盘”;
- 重新启动ClientDesktop项目,查看生成的日志,明确加载失败的具体原因(如版本不匹配、路径错误等)。
- 以管理员身份运行
内容的提问来源于stack exchange,提问作者jayco 10125

