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

Blazor Server本地化资源无法找到:项目命名连字符引发异常

解决Blazor Server(.NET 6.0)本地化资源找不到问题

问题背景

在.NET 6.0的Blazor Server应用中集成本地化实现语言切换时,新项目测试成功,但实际项目出现资源无法加载的情况。通过对比两个测试项目(EMV和E_M_V)发现,项目名称中的连字符会被自动替换为命名空间中的下划线,这直接导致资源查找路径不匹配,最终只能显示资源键名而非对应值。

已完成的配置包括:

  • 添加Resources文件夹及App.resx资源文件(包含TestString键,对应值为This is a Test)
  • 安装Microsoft.Extensions.Localization 7.0.0,并在_Imports.razor中引入相关命名空间
  • 在Program.cs中配置本地化服务
  • 在Index.razor中注入IStringLocalizer<App>并调用资源键

解决方案

1. 显式指定资源路径

在Program.cs配置本地化服务时,通过ResourcesPath参数指定资源文件所在的路径,确保命名空间转换后的路径能正确匹配资源文件位置:

builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");

// 后续配置本地化中间件等
builder.Services.AddControllersWithViews()
    .AddDataAnnotationsLocalization();

2. 调整资源文件命名匹配命名空间

如果项目名称带连字符(比如E-M-V),其命名空间会被转为E_M_V,此时需要将资源文件命名为E_M_V.App.resx(而非E-M-V.App.resx),放在Resources文件夹下,确保本地化组件能正确找到对应资源。

3. 验证本地化上下文命名空间

注入IStringLocalizer时,确保泛型参数的命名空间与资源文件的命名空间匹配。例如如果项目命名空间是E_M_V,则应注入IStringLocalizer<E_M_V.App>,或者创建一个与资源文件命名匹配的空类作为本地化标记:

// 在项目根目录创建App.cs(命名空间为E_M_V)
namespace E_M_V;
public class App { }

关键说明

这不是框架Bug,而是项目名称特殊字符导致的命名空间与资源文件命名不匹配问题。核心是确保资源文件的命名(含命名空间前缀)与项目实际生成的命名空间完全一致,或者通过显式指定ResourcesPath来消除路径匹配误差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:15:31