2010-09-30 32 views
3

我已经说了6个DLL(没有源代码)。 它们不包含任何逻辑,只包含一个包含字符串表的.resx文件。以编程方式读取资源字符串

有没有一种方法可以从字符串表中提取这些dll的ID和值并将其导出到文本文件?

回答

6

知道集名称和资源文件,可以使用反射加载它。

// Resources dll 
var assembly = Assembly.LoadFrom("ResourcesLib.DLL"); 

// Resource file.. namespace.ClassName 
var rm = new ResourceManager("ResourcesLib.Messages", assembly); 

// Now you can get the values 
var x = rm.GetString("Hi"); 

要列出所有键和值可以使用ResourceSet

var assembly = Assembly.LoadFrom("ResourcesLib.DLL"); 
var rm = new ResourceManager("ResourcesLib.Messages", assembly); 

var rs = rm.GetResourceSet(CultureInfo.CurrentCulture, true, true); 

foreach (DictionaryEntry r in rs) 
{ 
    var key = r.Key.ToString(); 
    var val = r.Value.ToString(); 
} 

如果您没有访问资源的lib,你可以看到什么是命名空间,类,以及其他一切通过Leo提到的Reflector

+0

是的,不需要动态hehehe,但有一天,我会找到一些它适合hehehe,顺便说一句....这个解决方案应该工作 – 2010-09-30 04:14:04

+0

是的,它确实列出在RM资源,但我没有知道字符串表中的ID。那么我如何在GetString中使用它? – siva 2010-09-30 04:48:19

+0

我需要列出ID和值! – siva 2010-09-30 04:48:35

1

我不`吨知道它是否会工作,但尝试使用.net反射http://reflector.red-gate.com/

+0

这确实提高了资源。但是我想写一个工具来读取所有这些dll中的字符串,对这些字符串进行一些分析。 .net反射器只显示字符串! – siva 2010-09-30 03:57:36

+0

我认为如果反射器显示数据是步骤的一半,请尝试将dll加载到动态变量中,并调用.Net反射器中提到的方法。如果还不清楚,只要求我详细讲解。 – 2010-09-30 04:03:46