2012-04-13 102 views
0

我已经使用反编译器研究了一些微软的程序集。我在每个装配中找到了“资源”文件夹。他们有一些价值。但是我没有在汇编代码中找到这个值的任何引用。 你能告诉我为什么我们使用资源?以及为什么我没有在反编译的代码中的任何地方找到资源名称。C#项目中的字符串资源

enter image description here

你可以看到,我选择System.Data.Entity.Design.resources选择其中的“资源”命名的文件夹下的铺设。 这些名称 - 值对在程序集中有什么用处?这是我的问题。并在代码中使用这个名称的值对? (如ResourceManager.GetString),所以

+0

这是正确的,在你的插图。它是名称 - 字符串对的列表。 – 2012-04-13 16:04:24

+0

是的,我知道。这是反编译器的快照。你可以看到我选择了System.Data.Entity.Design.resources,它被放置在名为“Resources”的文件夹下。 这些名称 - 值对在程序集中有什么用处?这是我的问题。并在代码中使用这个名称的值对? – 2012-04-13 16:08:29

+2

它们用于出现错误消息。它们存储为名称 - 值对,因为您可以在不更改名称的情况下更改错误消息。如果您想进行本地化,即为邮件使用不同的语言,这可能很有用。 – 2012-04-13 16:10:24

回答

1

资源串由名字加载它没有必要找到源代码完整字符串名称。字符串也可以被其他一些程序集使用。

I.e.资源:

Message_BadOne -> "Bad things happened" 
Message_Cool -> "Soo cooooll" 

代码:

Console.WriteLine(resourceManager.GetString(
     "Message" + (isItCool? "_Cool" : "_BadOne")); 
+0

你能告诉我为什么这样的代码给你一个例子没有在System.Data.Entity.Design.dll中找到? – 2012-04-13 16:27:08

+0

不知道。拆解非平凡的代码并不是学习的最佳方式。考虑看一些原始的源代码(CLR的一部分是“Rotor”,MVC是开源的)。注意:如果你解释你想在你的问题中达成什么目标,除了你的直接问题,人们将能够提供更好的答案。 – 2012-04-13 16:39:34