.NET内部资源字符串存储位置及资源键与错误文本匹配方法咨询
我之前反编译.NET代码排查问题时也遇到过一模一样的困扰,尤其是资源键和错误文本对不上的时候,简直头疼!下面给你分不同.NET版本梳理这些资源的存储位置:
资源键与本地化文本的存储位置(分.NET版本)
.NET Framework
- 核心类库的本地化资源大多存放在附属资源dll里,比如你提到的
net_io_timeout_use_ge_zero属于System.Net相关的错误,对应的资源文件是System.resources.dll。这类文件会按语言放在.NET安装目录的子文件夹里,比如英文版本的路径大概是:C:\Windows\Microsoft.NET\Framework\[具体版本号]\en-US\System.resources.dll,其他语言会对应不同的区域文件夹名称。 - 你可以用
ildasm、dnSpy或者ILSpy这类工具打开这个资源dll,找到里面的资源表,就能直接匹配资源键和对应的错误文本。部分资源也会内嵌在主程序集(比如System.dll)里,直接查看程序集的「资源」节点就能找到对应的.resources文件。
.NET Core/.NET 5+(跨平台版本)
- 这部分版本的资源存储方式更紧凑,核心库的资源大多内嵌在主程序集里,或者打包在关联的资源包中。比如System.Net相关的资源,你可以在
System.Net.Primitives、System.Net.Http这类程序集里查找。 - 用dnSpy或ILSpy打开目标程序集后,查看「资源」板块,找类似
SR.resources或者[程序集名].Strings.resources的文件,里面就包含了所有资源键和对应的文本。另外,.NET Core之后很多资源会通过自动生成的静态类(比如SR类)来调用,你直接反编译SR类,就能看到每个资源键对应的静态属性,甚至能直接看到对应的文本内容。
实用小技巧
- 如果你用dnSpy,直接在全局搜索框输入资源键
net_io_timeout_use_ge_zero,可以一键定位到对应的资源项,瞬间看到错误文本; - 也可以直接去.NET官方源代码仓库里搜索资源键,能快速找到字符串的定义,同时还能看到抛出这个异常的代码上下文,对排查问题帮助很大。
内容的提问来源于stack exchange,提问作者DiskJunky
相关产品推荐
相关产品推荐

