2010-09-30 75 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