Как удалить ненужные ресурсы из проекта

Делаю приложение Windows Forms (.NET Framework). Добавил иконку приложению - прошло нормально. Но потом, когда я решил добавить иконку формам, VS просил меня снова выбрать иконку с диска (не предложив использовать иконку приложения), и после компиляции размер проекта вырос со 100 до 500 кБ, и что самое неприятное, что когда я удалил все иконки с форм, в надежде уменьшить проект, после компиляции проект остался 500 кБ, как будто где (мне неизвестно) эти дублирующие иконки хранятся.

Понимаю что оффтоп, но буду рад, если мне помогут присвоить НЕДУБЛИРУЮЩИЕСЯ иконки на формы из одного ресурса, чтобы один и тот же файл многократно не увеличивал размер. Но в данном посте хотя бы хотелось бы получить ответ на вопрос, как мне теперь "вычистить мусор" из проекта и удалить повторяющиеся иконки, увеличивающие объем EXE файла?


Ответы (2 шт):

Автор решения: SelfishCrawler

При добавлении файлов на форму, для каждой отдельно созданной формы в Windows Forms создается соответствующий *.resx файл, в который данные ресурсы помещаются. Таким образом, добавляя один и тот же файл на несколько форм, Вы получаете дубликаты одного ресурса. Просмотреть ресурсы каждой формы в Visual studio можно, развернув соответствующую форму в представлении проекта:
введите сюда описание изображения

Таким образом, для решения проблемы, необходимо удалить дубликаты из каждого такого файла ресурсов в каждой форме.

Чтобы избежать подобной проблемы, есть следующие варианты:

  1. Приложить картинку к исполняемому файлу, в коде подгружать его по относительному пути.
  2. Добавить картинку в общее хранилище ресурсов для проекта (ПКМ по названию проекта -> Свойства -> Ресурсы) с соответствующим названием (к примеру MyImageResource, а затем обратиться к нему в коде через Properties.Resources.MyImageResource.
  3. Собственный контейнер файлов (для более крупных проектов)
→ Ссылка
Автор решения: 4per

Чтобы полностью избежать дублирования иконки в проекте

Перевод https://stackoverflow.com/a/16559342/5574962

  1. В свойствах проекта > Приложение > Значок и манифест and Manifest > через обзор найдите файл *.ico и добавьте его.

  2. В конструкторе или обработчике события Load каждой формы добавьте:

     this.Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath);
    
→ Ссылка