2009-06-02 50 views
14

我希望獲取.NET程序集中使用的所有字符串的列表,包括將局部變量設置爲「靜態」值,傳遞參數到方法,設置爲的字段等。從.NET程序集(dll)獲取所有靜態(interned)字符串

我記得很久以前我讀過的一個.NET程序集包含它使用的所有字符串的表格(或者它們可以是「interned」) - 或者我只是在做夢?

使用.NET Reflector是一個很好的理想(謝謝thijs),如果沒有人提供一個已經寫好的工具,我也會看看它的API。我可以編寫一個工具來檢查我們沒有錯過任何應該翻譯的字符串,我可以處理C#源代碼,但是我將不得不應對 分割成多行的字符串等)

我剛剛想過,我希望排除傳遞給CodeFlowException()等的字符串,所以這已經越來越複雜了。 PS:如果你能想到更好的一組標籤,請重新提出這個問題。

+0

沒有必要寫一個工具,一個已經存在.... – 2009-06-02 11:51:19

+0

我確實需要一個自定義工具,因爲我需要對字符串做更多的處理,一旦我得到它們。不過,我更樂意爲我的工具提供另一個工具輸出的字符串列表。 – 2009-06-02 12:33:19

+0

嘗試將你的程序集加載到Reflector中,如果反射器看到的對你來說很好(足夠),那麼你也可以使用System.Reflection來訪問它。 – thijs 2009-06-02 13:19:00

回答

0

在我寫了一個非常簡單的C#編譯器到底該在源代碼中找到了字符串。這解決了我所遇到的問題,並讓我在字符串中添加「註釋」以幫助譯員。

的意見剛剛從C#的意見在「神奇格式」

(對不起解析器不夠好,讓其他人使用它,它纔剛剛約我的C#代碼庫的作品)

閱讀
12

您可以使用SysInternals Strings工具查看可執行文件和目標文件中的字符串。

+0

使用這個工具,你也會得到像「!此程序無法在DOS模式」,這是不寫入源而是由編譯器添加運行。您還可以得到編碼資源的GUID和BASE64如果你是不吉利的。所有這一切讓你的工作負載的廢話從分離你需要翻譯的實際字符串: – thijs 2009-06-02 13:17:52

3

對於那些想從.NET程序集(.exe或.dll)中提取所有用戶字符串我寫了一個simple utility可以做到這一點(文件ExtractExeNetStrings2.zip)。 該實用程序是用C#編寫的。

1

簡單C#實用程序,其提取從.NET組件所有用戶字符串(.exe或.dll)通過檢查一個二進制文件的比特。

源代碼來自vladob的回答現在可以找到on github here。來自原始答案的鏈接已被打破。 vladob同意這個轉發。其實我同意了我。

相關問題