Получение всех статических (интернированных) строк из сборки .NET (dll) - PullRequest
14 голосов
/ 02 июня 2009

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

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

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

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

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

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

Ответы [ 5 ]

12 голосов
/ 02 июня 2009

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

2 голосов
/ 26 февраля 2012

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

2 голосов
/ 02 июня 2009

Вы должны быть в состоянии сделать это с помощью отражения, взгляните на это:

http://msdn.microsoft.com/en-us/library/system.reflection.fieldinfo.isliteral.aspx

и

http://msdn.microsoft.com/en-us/library/system.reflection.fieldinfo.aspx

1 голос
/ 09 мая 2016

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

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

0 голосов
/ 27 августа 2009

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

Комментарии были только что прочитаны из комментариев C # в «магическом формате»

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

...