从程序集中提取文字字符串

时间:2012-07-20 17:49:32

标签: c# windows winforms visual-studio-2010 fxcop

不太确定在哪里问这个。

基本上,我处理产品的本地化。我需要一种从编译的程序集中提取所有文字字符串的方法。我需要获取行号和源文件(用于比较目的)。我一直在使用FxCop,我刚刚创建了一条规则来吐出所有“ldstr”指令。但是,这依赖于过时的FxCop(我相信)。我也考虑过使用ildasm,但我找不到任何关于如何解析输出以可靠地检索我需要的信息的教程。

那么,有没有一个实用程序来处理这个?一个我没想到的简单方法?我想避免使用像ReSharper这样的扩展,因为它只能在解决方案的当前状态下运行;例如我无法生成用于比较的输出。

3 个答案:

答案 0 :(得分:2)

ildasm可以做到这一点:

ildasm.exe /text /metadata=heaps mscorlib.dll >out.txt

// User Strings
// -------------------------------------------------------
// 70000001 : ( 4) L"info"
// 7000000b : ( 2) L", "
// 70000011 : ( 5) L"value"
// 7000001d : ( 1) L"D"
...

答案 1 :(得分:1)

如果您使用的是Visual Studio,则可以运行以下宏

Sub TemporaryMacro()
        DTE.ExecuteCommand("Edit.FindinFiles")
        DTE.Find.FindWhat = ":q"
        DTE.Find.Target = vsFindTarget.vsFindTargetFiles
        DTE.Find.MatchCase = False
        DTE.Find.MatchWholeWord = False
        DTE.Find.MatchInHiddenText = True
        DTE.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxRegExpr
        DTE.Find.SearchPath = "C:\yourproject"
        DTE.Find.SearchSubfolders = True
        DTE.Find.FilesOfType = "*.*"
        DTE.Find.ResultsLocation = vsFindResultsLocation.vsFindResults1
        DTE.Find.Action = vsFindAction.vsFindActionFindAll
    End Sub

基本上它正在对目录中的:q 引用字符串进行正则表达式搜索,该目录将为您提供源代码中所有带引号的字符串

答案 2 :(得分:0)

显然,令人敬畏的Cecil OSS框架在这里很有用。它可以让你在汇编文件中轻松找到字符串文字。

需要更多的工作来找回源文件中的字符串。精明的是搜索程序集的文本源文件的内容以查找所有字符串声明:

  • Verbatim,如@"my""string"
  • 或经典之作"my\"string"

可以从Cecil.PDB子框架获取程序集的源文件列表。