Blazor服务器端使用含System.ServiceModel的DLL时触发FileNotFoundException
以下是导致该问题的常见原因及对应说明:
运行环境的本质差异
若为Blazor WebAssembly应用,它运行在浏览器沙箱环境中,不支持传统.NET Framework中的WCF核心组件(即System.ServiceModel)。而控制台应用通常运行在完整的.NET Framework或.NET Core/.NET 5+的服务器/桌面环境中,天然具备加载该程序集的条件。目标框架与依赖包的差异
.NET Core/.NET 5+之后,System.ServiceModel不再是系统默认内置程序集,需通过NuGet包(如System.ServiceModel.Primitives、System.ServiceModel.Http等)引入。如果自制DLL基于.NET Framework开发,而Blazor项目使用.NET Core/.NET 5+框架且未安装对应WCF相关NuGet包,就会出现找不到程序集的错误。依赖项未正确传递
自制DLL引用了System.ServiceModel,但该依赖未正确传递到Blazor项目中。控制台应用可能自动处理了依赖项引用,而Blazor项目(尤其是WebAssembly)对依赖传递要求更严格,需显式在Blazor项目中安装对应的WCF NuGet包。程序集绑定配置问题
.NET Framework中常用的程序集绑定重定向,在.NET Core/.NET 5+的Blazor项目中处理方式不同。如果自制DLL依赖特定版本的System.ServiceModel,但Blazor项目安装的NuGet包版本不匹配且未配置正确绑定规则,就会触发加载异常。Blazor Server的特殊限制
即使是Blazor Server应用,若项目未正确引用WCF相关NuGet包,或部署环境缺少对应程序集文件,也可能出现该错误。和控制台应用不同,Blazor Server的宿主环境(如IIS)对程序集加载策略有差异,无法自动找到未显式引用的依赖。
错误日志示例:
[2023-04-26T14:32:16.674Z] Error: System.IO.FileNotFoundException: Could not load file or assembly 'System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. Le fichier spécifié est introuvable. File name: 'System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' [...]
内容的提问来源于stack exchange,提问作者user21745694

