Подтвердить что ты не робот

Visual Studio: как сохранить ресурс изображения в качестве встроенного ресурса?

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

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

Таким образом, я изменил каждое изображение Настроить действие на Встроенный ресурс, и тогда ресурс появится внутри Lutz Reflector - точно так, как я хочу.

К сожалению, Microsoft специально не говорит об этом:

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

Поэтому вы не должны меняться этот параметр - Встроенный ресурс, потому что это будет включать дважды в сборке.

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

4b9b3361

Ответ 1

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

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

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

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

Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceUri)

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

Ответ 2

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

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

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

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

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

[namespace].Properties.Resources.[yourResourceName]

Ответ 3

В VS 2005:

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

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

btnStop.Image = myImages.Stop;

Ответ 4

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

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

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

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