Как я могу извлечь изображения из файла .resources, созданного при декомпиляции сборки .NET?

#c# #.net #visual-studio #resources #decompiling

#c# #.net #visual-studio #Ресурсы #декомпиляция

Вопрос:

Я работаю над восстановлением исходного кода для приложения для моего клиента. Мне удалось восстановить код приложения с помощью .NET Reflector. Но теперь я хочу доработать код и воссоздать отдельные формы, чтобы у меня были файлы codebehind, designer и resx для каждой формы. Проблема в том, что все изображения находятся в файлах «.resources». Как мне извлечь изображения из этих файлов «.resources», которые были сгенерированы Reflector?

Я бы предпочел использовать какой-нибудь инструмент, а не извлекать изображения программно, но я прибегну к коду, если не смогу найти подходящее приложение. Итак, я надеюсь, что кто-то делал это раньше или знает средство просмотра (желательно бесплатное!) для этих файлов ресурсов, которое позволило бы мне извлекать изображения. В остальном код тоже хорош; поскольку я мог бы написать свое собственное небольшое приложение для извлечения изображений.

Комментарии:

1. Рефлектор тоже может это сделать, откройте узел ресурсов сборки. Щелкните правой кнопкой мыши ресурс и выберите Сохранить как.

2. Я пытался извлечь изображения с помощью Reflector, но, насколько я вижу, Reflector сохраняет только файл .resources, он не позволяет сохранять растровые изображения, содержащиеся в этих файлах, в формате BMP … если я чего-то не упустил? При выборе файла .resources отображается список растровых изображений, но когда я щелкаю правой кнопкой мыши по растровому изображению, появляется опция «сохранить как», которая, к сожалению, не отображается серым цветом. Может быть, это функция платной версии, которая отсутствует в пробной версии, которую я использую?

Ответ №1:

Вы можете сохранить .resources файл, а затем использовать инструмент resgen (часть инструментов VS2010), чтобы преобразовать его обратно в .resx файл, используя командную строку, например:

 resgen foo.resources bar.resx
  

Затем .resx их можно добавить в проект C #. После того, как вы это сделаете, если вы попытаетесь открыть отдельные изображения, VS2010 предложит извлечь их в отдельный файл изображения.

Комментарии:

1. 1! Бесплатная версия сообщества VS2013 также может открывать файлы .resx и извлекать из них содержимое.

Ответ №2:

Эта программа поможет вам http://www.codeproject.com/KB/dotnet/Extracting_Embedded_Image.aspx

Комментарии:

1. Спасибо, сепулка. Я протестировал программу, на которую вы ссылались здесь, и она работает хорошо. 🙂 Я также нашел эту программу, которую я также использовал, jasonhaley.com/blog/post/2005/10/09 /. … Спасибо за вашу помощь в этом.

2. К сожалению, решение codeproject не распознает мой созданный проект как сборку. Ответ Клайва Тонга сработал для меня.

3. 1 — codeproject.com проект старый (.NET 2.0 VS2008 PRK) — поэтому убедитесь, что вы обновили и перекомпилировали до версии .NET, которую вы используете сейчас. Идеально подходит для меня в VS2017 .NET 4.5.

Ответ №3:

ILSpy должен выполнить эту работу — см. Функции на http://wiki.sharpdevelop.net/ILSpy.ashx и скриншот ниже.

скриншот

Комментарии:

1. Это позволяет сохранять ресурсы только в виде файла .resources. Насколько я могу судить, это не позволяет извлекать растровые изображения из файла ресурсов.

2. Странно, на скриншоте есть кнопка сохранения для каждого растрового изображения

3. ПРИВЕТ, Пупу. Спасибо за попытку помочь. Да, этот снимок экрана вводит в заблуждение и делает вид, что он может, но на самом деле он не позволяет сохранять изображения, содержащиеся в файле .resources . В моем случае, если я выбираю папку ресурсов , как на скриншоте, я получаю список файлов ресурсов, как первая запись на изображении. Итак, в моем случае ни одна из перечисленных записей не является фактическими файлами BMP, а файлами ресурсов, которые содержат растровые изображения. Если я просматриваю файлы ресурсов в Reflector, я вижу список растровых изображений, содержащихся в каждом файле, но не могу сохранить эти отдельные растровые изображения на диск.

Ответ №4:

JustDecompile может это сделать. Вы можете щелкнуть правой кнопкой мыши на ресурсе и выбрать Сохранить из контекстного меню.

Комментарии:

1. Пробовал, это не так. Он просто показывает их в виде строки System.Byte[] .