C# Windows Forms项目本地化时无法访问.resx资源文件
WinForm 多语言资源访问异常解决方案
你对多语言资源文件的访问方式有误,.NET 多语言资源机制不会为带语言后缀的 .resx 文件生成独立的可直接访问的强类型类,你预期的 Properties.ResourceString.de-DE.btnSwitchLanguage 写法本身不符合设计规范。
以下是需要修正的配置和操作步骤:
- 首先补全中性基础资源文件:你需要先在 Properties 文件夹下创建一个无语言后缀的基础资源文件
ResourceString.resx,内部定义和ResourceString.de-DE.resx完全一致的字符串键(如btnSwitchLanguage),访问资源时统一通过这个基础文件生成的Properties.ResourceString类调用即可。 - 检查资源文件属性配置:右键所有
.resx文件选择「属性」,确认以下配置:- 生成操作设置为
嵌入的资源 - 自定义工具设置为
PublicResXFileCodeGenerator(对应你设置的 Public 访问权限) - 基础
ResourceString.resx的「自定义工具命名空间」设置为Properties
- 生成操作设置为
- 正确的多语言切换代码写法如下:
using System.Globalization; using System.Threading; private void setLanguage() { // 先设置当前线程的文化配置为德语,资源管理器会自动匹配对应语言的资源文件 Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE"); Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE"); // 直接调用基础资源类的对应键即可,不需要加语言后缀 btnSwitchLanguage.Text = Properties.ResourceString.btnSwitchLanguage; }
如果修改后IDE依然没有资源访问提示,右键基础的 ResourceString.resx 选择「运行自定义工具」,强制重新生成强类型资源类即可。
如果是 .NET Core / .NET 5 及以上版本的 WinForm 项目,还需要在项目文件(.csproj)的 <PropertyGroup> 节点中添加中性语言配置,避免资源回退异常:
<NeutralLanguage>zh-CN</NeutralLanguage> <!-- 此处替换为你项目的默认中性语言 -->
内容的提问来源于stack exchange,提问作者Subscaper
相关产品推荐
相关产品推荐

