2012-07-20 2 views
2

Не совсем уверен, где спросить об этом.Извлечь литеральные струны из сборки

В принципе, я обрабатываю локализацию для нашего продукта. Мне нужен способ извлечь все литеральные строки из скомпилированных сборок. Мне нужно получить номер строки и исходный файл (для сравнения). Я использую FxCop, и я только что создал правило, чтобы выплюнуть все инструкции «ldstr». Но это зависит от FxCop, который устарел (я считаю). Я также рассмотрел использование ildasm, но я не могу найти никаких учебных пособий по анализу вывода, чтобы надежно получить нужную мне информацию.

Итак, есть ли утилита для обработки этого? Простой способ, о котором я не думаю? Я хотел бы избежать расширений, таких как ReSharper, потому что он работает только с текущим состоянием вашего решения; например Я не могу производить вывод для сравнения.

+0

У вас нет источника? –

+0

Да, у меня есть источник. Мне нужно иметь источник, чтобы сделать локализацию ... не так ли? Когда я нахожу литералы, я добавляю их в соответствующий файл .resx. – xallean

ответ

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" 
... 
+0

Это не делает то, что мне нужно, но этого достаточно, чтобы заменить FxCop. Благодаря! – xallean

2

Если вы используете 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 

В основном это делает поиск по регулярному выражению в : ● строки в кавычках в каталоге, который даст вам все строки в кавычках в вашем Исходный код

+0

Это хорошее решение для резервного копирования! Я не знал, что смогу это сделать. Будет ли способ экспортировать вывод из этого файла в файл, содержащий номер строки и исходный файл для каждого найденного «: q»? – xallean

0

Очевидно, что здесь может быть полезной OSS-инфраструктура. Это позволит вам легко найти строковые литералы в файле сборки.

Требуется немного больше работы, чтобы найти строки в исходном файле. Проницательный будет состоять в поиске в содержании текстовых исходных файлов сборки, чтобы найти все строки декларации:

  • Стенографический как @"my""string"
  • или классический, как "my\"string"

Список исходного файла сборку можно получить из подрамника Cecil.PDB.

Смежные вопросы