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
相关产品推荐
相关产品推荐

