Получение всех статических (интернированных) строк из сборки .NET(dll)

Я хочу получить список всех строк, которые используются в сборке .NET, включая "статические" значения, для которых установлены локальные переменные, параметры, переданные методам, поля при установке и т.д.

Я помню из того, что я давно прочитал, что сборка .NET содержит таблицы всех строк, которые она использует (или они могут быть "интернированы" ) - или я просто мечтаю?

Использование .NET Reflector - хороший идеал (спасибо thijs), я также буду смотреть на его API, если никто не придумает уже написанный инструмент.

(Это значит, что я могу написать инструмент для проверки того, что мы не пропустили ни одной строки, которая должна быть переведена. Я могу обработать исходный код С#, однако мне придется справиться с Строки, разделенные на многие строки и т.д.)

Я только что подумал, я хочу исключить строки, переданные в CodeFlowException() и т.д., поэтому это уже становится более сложным.

PS: если вы можете подумать о лучшем наборе тегов, повторите этот вопрос.

Ответы

Ответ 1

В конце я написал очень простой синтаксический анализатор С#, который нашел строки в исходном коде. Это решило проблему, с которой я столкнулся, и позвольте мне добавить "комментарии" к строкам, чтобы помочь переводчикам.

Комментарии были просто прочитаны с комментариями С# в "магическом формате"

(Извините, что синтаксический анализатор недостаточно хорош, чтобы позволить кому бы то ни было использовать его, он работает только на моей базе кода С#)

Ответ 2

Вы можете использовать инструмент SysInternals Strings для просмотра строк в исполняемых файлах и объектных файлах.

Ответ 3

Для тех, кто хочет извлечь все строки пользователя из сборки .NET(.exe или .dll), я написал simple утилита, которая может это сделать (файл ExtractExeNetStrings2.zip). Утилита написана на С#.

Ответ 5

Упрощенная утилита С#, которая извлекает все пользовательские строки из сборки .NET(.exe или .dll) путем изучения битов двоичного файла.

Теперь можно найти исходный код из ответа vladob в github здесь. Ссылка из первоначального ответа была нарушена. vladob дал согласие на этот репост. На самом деле я дал согласие на меня.