2009-06-02 45 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同意这个转发。其实我同意了我。

相关问题