Это может быть полезным, также: Асинхронное должностное лицо оболочки в PHP
Я бы написал специальный инструмент для поиска в вашем исходном коде.
Если вы удалите идентификатор ресурса из файла заголовка (т. Е., Возможно, с именем resource.h), а затем перекомпилируете и не получите никаких предупреждений: это хорошо.
Вот как я бы написал приложение. Возьмите в качестве входных данных файл ресурсов (resource.h), который вы хотите изучить. Откройте файл заголовка (* .h) и проанализируйте все константы ресурсов (или, по крайней мере, те, которые вас интересуют). Сохраните их в хеш-таблице для быстрого поиска позже. Для каждого файла кода в вашем проекте найдите в тексте экземпляры каждого идентификатора вашего ресурса. Когда используется идентификатор ресурса, увеличивайте значение в хеш-таблице, в противном случае оставьте его равным нулю. В конце выгрузите все идентификаторы ресурсов, которые обнуляются в файле журнала или что-то в этом роде. Затем проверьте, действительно ли вы можете безопасно удалить указанные идентификаторы ресурса. Как только вы это сделаете, напишите другой инструмент, который удаляет указанные идентификаторы ресурса с учетом результатов вашего файла журнала.
Вы можете написать такой инструмент на perl, и он будет выполняться примерно за 0,3 секунды: но на отладку уйдет несколько дней. :) Или вы можете написать это в .NET, и это будет выполняться немного медленнее, но вам потребуется час на отладку. :)
Вы можете использовать сторонний плагин для Visual Studio как ReSharper . Эта надстройка проанализирует ваш код C # и укажет на неиспользуемые ресурсы. Но работает только с C #.
Для проектов C ++ ознакомьтесь с ResOrg от Riverblade.
«Организатор идентификатора ресурса (сокращенно ResOrg) - это надстройка для Visual C ++, разработанная для помочь преодолеть одну из самых раздражающих (и ненужных) рутинных работ по разработке / обслуживанию приложений Windows - поддержание значений идентификаторов символов ресурсов »
If your code contains dynamic loading of resources (e.g. via strings) at runtime, then there is no way to automatically determine which resources can be safely removed from the source. A dynamic loading statement could load any resource.
Your best bet is to start with your trimmed down version of the app, run it, and identify which resources are missing when you test it. Then add them back in and retest.
У меня никогда не было такого плохого. Мой метод в скомпилированных программах - использовать сценарий REXX, который имитирует GREP, ища ссылки на источник, который, как я подозреваю, не используется, удалить их из программы и посмотреть, что сломается. Я использую сценарий REXX, потому что могу предварительно отфильтровать список файлов, которые хочу найти. Это позволяет мне выполнять поиск по папкам и компьютерам.
Возможно, вы захотите взглянуть на инструмент Reflector (бесплатно), не путать с ReSharper (дорого). Он может показать вам, какие библиотеки DLL зависят от другой. Затем, если вы хотите, вы можете удалить DLL, на которую не ссылается что-либо еще. Будьте осторожны, если вы используете инъекцию зависимостей или отражение, которые могут нарушить ваш код без вашего ведома.
Отражатель: http://www.red-gate.com/products/reflector/ .
Эта надстройка рисует графы зависимостей сборок и графики IL: http://reflectoraddins.codeplex.com/Wiki/View.aspx?title=Graph .
Maybe Find Unused Resources in a .NET Solution helps here? Basically, you'll have to check which resources are used (e.g. by comprehensive code coverage checks) and remove the unused ones.
And probably you should not be afraid by using the trail-and-error approach to cleaning up.
В обозревателе решений щелкните правой кнопкой мыши Ссылку и выберите пункт меню Найти зависимый код .
Если он не может найти какой-либо зависимый код, вы можете удалить эту ссылку из проекта. (Операция Удалить также находится в меню, вызываемом правой кнопкой мыши.)
РЕДАКТИРОВАТЬ: Для большого проекта операция поиска зависимого кода займет времени. Так как у вас есть 2000 ресурсов и, скорее всего, значение ваше время, вероятно, не жизнеспособный вариант ....
Для ресурсов C ++ вы пытались щелкнуть правой кнопкой мыши проект в «Представлении ресурсов», а затем удалить те, у которых нет галочки рядом с ними? Небезопасно удалять неиспользуемые ресурсы диалогового окна, поскольку в коде они упоминаются как "перечисления" (как показано ниже).
enum { IDD = IDD_ABOUTBOX };
... однако для всех остальных это должно быть безопасно.