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

无需重建项目,更新.NET日文附属资源程序集

无需重建项目更新.NET日文文化附属程序集资源

问题背景

开发.NET项目时,需更新日文(ja-JP)文化附属程序集中的单个资源,但受项目限制无法重建整个项目。当前项目使用Greeting.ja-JP.resx做本地化,已有对应附属程序集,但替换手动生成的Example.resources.dll后,程序仍读取默认资源值。

已执行操作

  • 手动更新Greeting.ja-JP.resx文件
  • 使用VS2019开发者命令提示符执行以下命令:
    resgen Greeting.ja-JP.resx Greeting.ja-JP.resources
    
    al -target:lib -embed:Greeting.ja-JP.resources -culture:ja-JP -out:Example.resources.dll
    
  • 将生成的Example.resources.dll替换到输出目录的bin/debug/ja-JP/路径下

核心问题

你的ResourceManager构造函数指定的资源根名称是Example.Greeting,但生成的.resources文件命名为Greeting.ja-JP.resources,两者不匹配。.NET资源管理器会按照[根名称].[文化].resources的格式查找附属程序集中的嵌入资源,名称不匹配时会 fallback 到默认资源。

正确操作步骤

1. 确保.resx文件已更新

打开Greeting.ja-JP.resx,修改目标资源项(比如HelloString的内容)并保存。

2. 生成正确命名的.resources文件

使用resgen工具生成与资源根名称匹配的资源文件,命令如下:

resgen Greeting.ja-JP.resx Example.Greeting.ja-JP.resources
  • 这里的Example.Greeting.ja-JP.resources对应ResourceManager的根名称Example.Greeting + 文化标识ja-JP,是资源管理器查找的标准格式。

3. 重新生成附属程序集

使用al.exe(程序集链接器)将正确命名的.resources文件嵌入到附属程序集中,命令:

al -target:lib -embed:Example.Greeting.ja-JP.resources -culture:ja-JP -out:Example.resources.dll
  • -embed参数必须指定正确的.resources文件名,确保资源管理器能识别
  • -culture严格指定ja-JP,与目标文化目录匹配
  • -out输出的文件名必须为[项目名称].resources.dll,这里项目名称是Example,所以命名为Example.resources.dll

4. 替换附属程序集

将生成的Example.resources.dll复制到项目输出目录的ja-JP子目录下,覆盖原文件:

Example/bin/debug/ja-JP/Example.resources.dll

5. 验证更新

  • 关闭正在运行的程序实例(确保加载新的DLL,避免文件锁定或缓存)
  • 重新启动程序,切换到ja-JP文化,检查是否读取到更新后的资源值

补充说明

  • 若替换后仍未生效,可检查以下几点:
    • 确认.resources文件命名完全匹配[根名称].[文化].resources
    • 检查al.exe命令是否正确嵌入了目标.resources文件(可使用ILSpy等工具查看附属程序集的嵌入资源)
    • 确保程序运行时加载的是替换后的DLL(可查看文件修改时间)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:38:18