Получение всех статических (интернированных) строк из сборки .NET(dll)
Я хочу получить список всех строк, которые используются в сборке .NET, включая "статические" значения, для которых установлены локальные переменные, параметры, переданные методам, поля при установке и т.д.
Я помню из того, что я давно прочитал, что сборка .NET содержит таблицы всех строк, которые она использует (или они могут быть "интернированы" ) - или я просто мечтаю?
Использование .NET Reflector - хороший идеал (спасибо thijs), я также буду смотреть на его API, если никто не придумает уже написанный инструмент.
(Это значит, что я могу написать инструмент для проверки того, что мы не пропустили ни одной строки, которая должна быть переведена. Я могу обработать исходный код С#, однако мне придется справиться с
Строки, разделенные на многие строки и т.д.)
Я только что подумал, я хочу исключить строки, переданные в CodeFlowException() и т.д., поэтому это уже становится более сложным.
PS: если вы можете подумать о лучшем наборе тегов, повторите этот вопрос.
Ответы
Ответ 1
В конце я написал очень простой синтаксический анализатор С#, который нашел строки в исходном коде. Это решило проблему, с которой я столкнулся, и позвольте мне добавить "комментарии" к строкам, чтобы помочь переводчикам.
Комментарии были просто прочитаны с комментариями С# в "магическом формате"
(Извините, что синтаксический анализатор недостаточно хорош, чтобы позволить кому бы то ни было использовать его, он работает только на моей базе кода С#)
Ответ 2
Вы можете использовать инструмент SysInternals Strings для просмотра строк в исполняемых файлах и объектных файлах.
Ответ 3
Для тех, кто хочет извлечь все строки пользователя из сборки .NET(.exe или .dll), я написал simple утилита, которая может это сделать (файл ExtractExeNetStrings2.zip
).
Утилита написана на С#.
Ответ 4
Вы должны иметь возможность сделать это с помощью отражения, взгляните на это:
http://msdn.microsoft.com/en-us/library/system.reflection.fieldinfo.isliteral.aspx
и
http://msdn.microsoft.com/en-us/library/system.reflection.fieldinfo.aspx
Ответ 5
Упрощенная утилита С#, которая извлекает все пользовательские строки из сборки .NET(.exe или .dll) путем изучения битов двоичного файла.
Теперь можно найти исходный код из ответа vladob в github здесь. Ссылка из первоначального ответа была нарушена. vladob дал согласие на этот репост. На самом деле я дал согласие на меня.