如何在.NET Core 7 Blazor Server应用中使用独立程序集DLL存储本地化资源?
实现独立本地化资源DLL的Blazor Server方案
1. 创建独立资源类库
- 新建一个和你的Blazor应用框架匹配的类库项目(推荐.NET 6+或.NET Standard 2.1)
- 删除默认的
Class1.cs,添加一个空的资源锚点类,比如SharedResources.cs(无需写任何代码,仅作为资源文件的定位标识)
2. 添加多语言资源文件
- 在类库根目录直接添加资源文件,命名遵循规则:
- 默认 fallback:
SharedResources.resx - 中文资源:
SharedResources.zh-CN.resx - 英文资源:
SharedResources.en-US.resx
- 默认 fallback:
- 选中每个资源文件,在属性面板设置:
- 生成操作:
Embedded resource - 访问修饰符:
Public(确保外部程序集能访问资源)
- 生成操作:
3. 配置类库资源嵌入
在类库的.csproj文件中添加以下配置,保证资源被正确嵌入程序集:
<PropertyGroup> <GenerateResourceDesignerFile>true</GenerateResourceDesignerFile> <EmbeddedResourceUseDependentUponConvention>true</EmbeddedResourceUseDependentUponConvention> </PropertyGroup>
编译类库,生成可复用的DLL文件。
4. 在Blazor Server应用中集成
- 引用生成的类库项目,或打包成NuGet包后安装
- 在
Program.cs中配置本地化服务,指定使用独立类库的资源:
// 无需指定资源路径,因为用的是独立程序集 builder.Services.AddLocalization(options => options.ResourcesPath = ""); // 配置支持的文化 builder.Services.Configure<RequestLocalizationOptions>(options => { var supportedCultures = new[] { new CultureInfo("en-US"), new CultureInfo("zh-CN") }; options.DefaultRequestCulture = new RequestCulture("zh-CN"); options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures; }); // 注册基于独立程序集的本地化提供器 builder.Services.AddSingleton<IStringLocalizerFactory, ResourceManagerStringLocalizerFactory>();
- 在
_Host.cshtml中启用本地化中间件:
app.UseRequestLocalization();
5. 在组件/代码中使用本地化字符串
Razor组件中使用
@inject IStringLocalizer<SharedResources> Localizer <h1>@Localizer["WelcomeMessage"]</h1> <p>@Localizer["GreetingText", "John"]</p>
后台C#代码中使用
public class UserService { private readonly IStringLocalizer<SharedResources> _localizer; public UserService(IStringLocalizer<SharedResources> localizer) { _localizer = localizer; } public string GetWelcomeTip() { return _localizer["WelcomeTip"]; } }
6. 关键注意事项
- 资源文件必须和锚点类(如
SharedResources.cs)放在同一目录,无需和业务组件/代码的层级对应 - 如果需要拆分不同业务模块的资源,可添加多个锚点类(比如
OrderResources.cs对应OrderResources.zh-CN.resx) - 部署时要确保类库主DLL和对应卫星资源DLL(如
zh-CN/YourResourceLib.resources.dll)一起发布
内容的提问来源于stack exchange,提问作者arm007
相关产品推荐
相关产品推荐

