2

不太清楚在哪里问这个。

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

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

4

3 回答 3

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"
...
于 2012-07-22T02:51:26.767 回答
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引用字符串进行正则表达式搜索,该目录将为您提供源代码中的所有引用字符串

于 2012-07-20T18:09:57.567 回答
0

显然,很棒的Cecil OSS 框架在这里可能很有用。它会让你在汇编文件中轻松找到字符串文字。

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

  • 逐字逐句@"my""string"
  • 或经典之类的"my\"string"

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

于 2012-07-21T22:09:30.293 回答