Visual Studio: как сохранить ресурс изображения как встроенный ресурс? - PullRequest
23 голосов
/ 10 ноября 2008

По умолчанию, когда вы добавляете изображение (значок, растровое изображение и т. Д.) В качестве ресурса в свой проект, для Действие построения изображения устанавливается значение Нет . Это сделано потому, что изображение волшебным образом хранится в файле .resources.

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

Таким образом, я изменил Построение каждого изображения на Встроенный ресурс , и затем ресурс появился внутри Отражателя Лутца - именно так, как я хочу.

К сожалению , Microsoft специально не делает этого :

Обратите внимание, что когда редактор ресурсов добавляет изображение, оно устанавливает Build Action на Нет , потому что файл .resx ссылается на файл изображения. При сборке время изображение втягивается в файл .resources, созданный из файл .resx. Изображение может тогда легко быть доступным через строго типизированный класс, автоматически сгенерированный для .resx файл.

Поэтому не стоит менять этот параметр Embedded Resource , потому что это будет включать в себя изображение дважды в сборке.

Так каков правильный способ включить изображение в качестве встроенного ресурса?

Ответы [ 4 ]

43 голосов
/ 27 января 2009

Примечание. Этот ответ не является рекомендуемым способом обработки ресурсов изображения. Это просто решает конкретную проблему, как описано в вопросе (т.е. включать изображение в качестве встроенного ресурса).

Не добавлять изображение в качестве ресурса. Я бы предпочел сделать следующее:

  • Создайте изображение / иконку и сохраните его в файл
  • Выберите Проект -> Добавить существующий элемент и добавьте файл
  • Установить для действия сборки встроенный ресурс

Затем вы можете получить доступ к этому ресурсу, используя

Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceUri)

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

11 голосов
/ 30 января 2009

В представлении проекта откройте поддерево свойств; дважды щелкните элемент Resources.resx.

(Если у вас его нет, щелкните правой кнопкой мыши элемент «Свойства» и выберите «Открыть», затем перейдите на вкладку «Ресурсы» слева и нажмите ссылку в середине страницы, чтобы создать файл ресурсов по умолчанию.)

щелкните первый выпадающий список вверху страницы resources.resx. Это, вероятно, говорит что-то бесполезное, например «Строки», и выберите «Изображения». Также вы можете нажать Ctrl + 2 . Это изменяет представление ресурсов изображения. Теперь нажмите «Добавить ресурс» и выберите «существующий файл». Выберите файл изображения и нажмите «Открыть». Переименуйте ресурс, если хотите.

Нажмите значок Сохранить.

Теперь вы можете программно обращаться к встроенному ресурсу:

[namespace].Properties.Resources.[yourResourceName]
6 голосов
/ 29 января 2009

В VS 2005:

  • Щелкните правой кнопкой мыши по вашему проекту и выберите добавить новый элемент.
  • Добавить файл ресурса. Звонок myImages.resx
    Поместите этот файл в корневую папку проекта.
  • Щелкните правой кнопкой мыши myImages.resx и выберите View Designer
  • Выберите Добавить ресурс, Добавить существующий файл.
  • Найдите изображение, например. stop.bmp
    Это изображение не обязательно должно быть включено в проект на данном этапе. Файл ресурсов автоматически сделает это.

Для ссылки на изображение в коде используйте что-то вроде:

btnStop.Image = myImages.Stop;
5 голосов
/ 10 ноября 2008

Это зависит от того, как вы хотите использовать изображение.

Если вы хотите локализовать и получить доступ к определенным изображениям для конкретной культуры, то использование ResourceManager - хороший способ, поскольку он предоставляет некоторые приятные функции для спутниковых сборок, поиска, откатов и т. Д.

Если вы просто хотите встроить ресурс в сборку и не беспокоитесь о локализации (используя Assembly.GetManifestResourceStream), тогда просто добавьте изображение и установите для действия сборки значение Embedded Resource.

Документация предупреждает вас о том, что вы не должны устанавливать действие сборки на Embedded Resource, поскольку ресурс уже скомпилирован в сборку компилятором ресурса через файл .resx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...