You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux Kestrel服务器无法加载Blazored.LocalStorage程序集求助

Blazored.LocalStorage在Ubuntu 20.04 LTS加载失败,Ubuntu 22.04可正常运行

问题详情

Blazor Web服务在Windows开发环境运行正常,此前在Ubuntu 20.04 LTS的Kestrel上稳定运行9个月,多次更新都没问题,但本次部署后启动报错:

Unhandled exception. System.IO.FileNotFoundException: Could not load file or assembly 'Blazored.LocalStorage, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3c577f5cf869402a'. The system cannot find the file specified.

File name: 'Blazored.LocalStorage, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3c577f5cf869402a'
Aborted (core dumped)

已确认:

  • Blazored.LocalStorage.dll确实在部署包内
  • 用命令strings Blazored.LocalStorage.dll | egrep '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$'验证过版本是1.0.0.0
  • 所有文件权限、所有者一致,唯独这个DLL加载失败

试过以下操作都没用:

  • 回滚到之前能正常运行的旧版本部署
  • 执行apt-get update && apt-get upgrade并重启服务器
  • 配置.NET和Kestrel环境变量后直接在Shell启动

唯一差异:部署包放到Ubuntu 22.04服务器上能正常运行,两台服务器仅系统版本不同。

原因分析

核心是Ubuntu 20.04和22.04的系统依赖库差异导致,具体可能是这几点:

  1. libssl版本不兼容:Ubuntu 20.04默认用libssl1.1,22.04用libssl3,.NET运行时加载程序集时对SSL库的依赖版本不匹配,间接引发Blazored.LocalStorage加载失败
  2. 系统基础库版本差异:Ubuntu 20.04的glibc等基础库版本比22.04低,部分.NET程序集的绑定逻辑在旧库环境下出现异常
  3. 程序集绑定重定向失效:部署包中的runtimeconfig.json或*.deps.json里的绑定配置,在Ubuntu 20.04的.NET环境下没正确生效,导致版本匹配出错

解决方法

方法1:升级Ubuntu 20.04的libssl到3.0版本

  1. 添加openssl 3的PPA源:
    sudo add-apt-repository ppa:openssl-team/openssl-3
    sudo apt-get update
    
  2. 安装libssl3:
    sudo apt-get install libssl3
    
  3. 重启Kestrel服务后测试

方法2:修复程序集绑定配置

  1. 打开部署包中的[你的项目名].deps.json,搜索Blazored.LocalStorage,确认所有引用该程序集的条目都指向1.0.0.0版本
  2. 如果有版本不一致的条目,手动修正后重新部署
  3. 也可以在项目的.csproj文件中添加强制绑定重定向配置,重新编译部署:
    <PropertyGroup>
      <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
      <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
    </PropertyGroup>
    

方法3:更新Ubuntu 20.04的.NET运行时到最新兼容版本

  1. 先卸载当前的.NET运行时/SDK:
    sudo apt-get remove dotnet-sdk-* dotnet-runtime-*
    
  2. 安装对应版本的最新.NET运行时(比如项目用.NET 6):
    wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    sudo apt-get update
    sudo apt-get install dotnet-runtime-6.0
    
  3. 重启服务测试

方法4:改用自包含部署模式

把项目编译成自包含包,包含所有依赖的.NET运行时和系统库,不依赖服务器上的系统库:

  1. 在项目目录执行编译命令:
    dotnet publish -c Release -r linux-x64 --self-contained true
    
  2. 把生成的publish目录下的所有文件部署到Ubuntu 20.04,直接启动可执行文件即可

内容的提问来源于stack exchange,提问作者Jay Imerman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:25:28