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

Blazor .NET6.0项目Docker Compose发布模式下mscorlib加载失败

Blazor .NET 6 Docker Compose发布异常与插件本地化问题解决

解决Docker Compose发布模式下mscorlib, Version=4.0.0.0加载异常

  • 确认Docker基础镜像:使用官方.NET 6 Runtime镜像mcr.microsoft.com/dotnet/aspnet:6.0,避免使用.NET Framework相关镜像——mscorlib是.NET Framework核心程序集,.NET 6依赖的是System.Private.CoreLib,混用镜像会导致程序集加载混淆。
  • 调整发布参数:在Dockerfile的发布命令中添加--self-contained true,确保发布包包含完整的.NET 6运行时依赖,不依赖宿主环境的.NET组件。示例命令:
    dotnet publish -c Release -o /app --self-contained true
    
  • 校验ResourceManager参数:检查$"{Assembly}.{Class}.{Language}"的资源命名格式,确保程序集名称与插件实际程序集的FullName一致。Docker环境下程序集加载路径与本地不同,建议通过插件程序集对象直接获取名称:
    var assemblyName = _localizationAssembly.GetName().Name;
    resourceManager = new System.Resources.ResourceManager($"{assemblyName}.{Class}.{Language}", _localizationAssembly);
    

修复插件内IStringLocalizer失效问题

  • 注册插件本地化资源:主程序启动时,将插件程序集添加到本地化配置中,让系统识别插件的资源文件。在Program.cs中添加:
    var pluginAssembly = Assembly.LoadFrom(Path.Combine(AppContext.BaseDirectory, "YourPlugin.dll"));
    builder.Services.Configure<LocalizationOptions>(options =>
    {
        options.Resources.Add(new ResourceAssemblyRegistration(pluginAssembly));
    });
    
  • 使用强类型本地化:插件内部采用IStringLocalizer<T>(T为插件内的具体类型)替代通用IStringLocalizer,这样本地化系统会自动关联插件的嵌入资源文件。
  • 配置资源文件属性:插件项目中的.resx文件需设置生成操作为嵌入的资源,复制到输出目录为如果较新则复制,确保资源被嵌入到插件程序集,Docker发布时不会丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:05:13