Как открыть ресурсы в visual studio
Презентацию к данной лекции Вы можете скачать здесь.
5.1. Проекты и решения в Visual Studio
Компилятор — это программа , которая преобразует высокоуровневые инструкции, создаваемые программистом, в инструкции более низкого уровня для выполнения на компьютере. В среде Microsoft . NET компилятор выдает код на промежуточном языке ( MSIL ), который при запуске программы компилируется в машинный код.
Эта команда скомпилирует файл MyProg.cs и создаст файл с именем MyProg.exe. Компилятор командной строки также доступен после установки Visual Studio .
Windows Phone SDK установит сразу все необходимые инструменты для создания приложений для Windows Phone : интерактивную среду разработки, эмулятор Windows Phone и другие инструменты. Инструменты также можно использовать для создания настольных приложений и игр XNA для компьютеров под управлением Windows и Xbox 360. Если в вашем компьютере установлена другая версия Visual Studio 2010, после установки Windows Phone SDK в нее будут добавлены новые типы проектов и инструменты.
Visual Studio . Visual Studio предоставляет единую среду для создания, редактирования и запуска программ. Она управляет проектами и решениями, которые объединяют все файлы программы, и позволяет управлять их содержимым. Также среда предоставляет инструменты для отладки программ. Visual Studio используется для создания приложений для компьютеров так же, как и для устройств Windows Phone .
После установки Windows Phone SDK значок Microsoft Visual Studio 2010 появится в списке программ.
Среда Visual Studio содержит большое количество кнопок, меню и инструментов, с которыми можно работать. Информацию об их назначении можно получить в справочной системе.
В рамках Visual Studio рассматриваются термины проект и решение . Они используются для организации создаваемых программ и систем. Visual Studio не может запустить любой код программы , который не входит в состав проекта или решения . Для начала можно использовать один из встроенных шаблонов для разных типов проектов.
Простой проект Visual Studio
Проект является контейнером для набора программных файлов и ресурсов , которые создают файл сборки. Самый простой проект содержит единственный файл программы. Можно создать проект , выбрав в главном меню Файл -> Создать проект …. Откроется диалоговое окно Создать проект (рис. 5.1).
Если выбрать шаблон Консольное приложение, Visual Studio создаст минимальный проект , который содержит единственный файл программы с именем Program.cs. Этот файл содержит примерно такой код:
Созданный файл Library.cs теперь является частью проекта , и при построении проекта Visual Studio скомпилирует этот файл вместе с файлом Program.cs. Однако, в результате будет создан единственный исполняемый файл с именем Program.exe. Поэтому только в одном из этих файлов может быть метод Main, иначе компилятор не сможет определить, какой из этих классов должен начать работу. Класс Library изначально будет пустым:
Можно создать экземпляры этого класса в методе Main:
Пространства имен и проекты. Классы Library и Program находятся в пространстве имен SimpleProject. Часто бывает удобно помещать различные части системы в отдельные пространства имен . Это особенно важно, если программы создают разные люди. Если программист, который пишет код библиотеки, решает, что имя Save подходит для создаваемого им метода, другой программист, который работает над другим модулем той же самой программы, также может использовать имя Save и для своего метода.
Пространства имен является логическим способом группирования элементов. У них нет никакой привязки к физическому расположению кода. Можно поместить класс библиотеки в отдельное пространство имен просто, просто изменив его имя:
Класс Library теперь находится в пространстве имен SimpleLibrary. Но попытка собрать проект приведет к возникновению ошибок (рис. 5.2).
увеличить изображение
Рис. 5.2. Окно с информацией об ошибках компиляции программы
Метод Main класса Program пытается создать экземпляр класса Library. Этот класс больше не находится в пространстве имен SimpleProject, и таким образом, возникают ошибки. К счастью, поле Описание списка ошибок подсказывает, что возможно пропущена директива using. Можно решить проблему, добавив директиву using, чтобы указать компилятору на необходимость просмотра пространства имен SimpleLibrary, если нужно найти класс:
Другой способ решения проблемы — использовать полностью определенные имена для получения доступа к ресурсам библиотеки:
Необходимо помнить о том, что мы просто создаем имена элементов в проекте , но не определяем, где они сохраняются. При построении проекта Visual Studio будет просматривать все исходные файлы проекта для поиска необходимых элементов.
Добавление ресурсов в проект
Если программа должна использовать ресурсы (например, изображение для заставки программы), их также нужно добавить в проект . Можно добавить растровое изображение таким же образом, как и новый класс. После добавления изображения оно появится в обозревателе решений (рис. 5.3).
Рис. 5.3. Список файлов проекта в обозревателе решений
Теперь решение содержит файл растрового изображения с именем Bitmap1.bmp. Можно выбрать способ управления этим содержимым в Visual Studio, изменив свойства этого объекта.
Свойства ресурсов . Как и у всех объектов, которыми управляет Visual Studio, у ресурсов проекта тоже есть свойства. Можно работать с свойствами ресурсов так же, как и со свойствами других объектов, — используя область свойств (рис. 5.4).
Представленные на рисунке настройки указывают Visual Studio при построении проекта скопировать изображение в тот же каталог, в котором создается файл с программой. В этом случае программа сможет открыть этот файл и использовать его при выполнении программы:
Этот код загрузит растровое изображение в переменную b класса Bitmap. Таким образом, можно легко добавлять в проект ресурсы .
Внедрение ресурсов в приложение. В предыдущем примере настройки указывают, чтобы рисунок был сохранен в том же каталоге, что и программа. Этот подход предполагает, что при установке программы файлы с изображениями будут скопированы в папку с исполняемым файлом программы.
Вместо этого можно встроить этот ресурс прямо в файл программы при ее построении. Когда программа будет создана, ее исполняемый файл будет содержать изображение. Это можно сделать, изменив свойства ресурса (рис. 5.5).
Рис. 5.5. Свойства изображения, внедряемого в исполняемый файл
Свойству Действие при построении файла Bitmap2.bmp присвоено значение Внедренный ресурс. Теперь изображение сохраняется внутри файла программы. Использовать этот ресурс немного сложнее, но будет гарантировано работать независимо от того, где программа установлена, поскольку при этом не используются дополнительные файлы:
Этот код загрузит изображение из встроенного ресурса и сохранит его в переменной b. Обратите внимание, что при получении ресурса из сборки кроме имени ресурса нужно также указать ее пространство имен .
Файлы сборки и исполняемые файлы
Сборки библиотек. Существуют два вида сборок — исполняемые файлы и библиотеки. При создании нового проекта можно выбрать шаблон для создания библиотеки. В этом случае будет создан новый проект , который будет содержать только классы библиотеки, т.е. никакой класс в сборке не будет содержать метод Main. Сборка библиотеки компилируется в файл с расширением .dll, что расшифровывается как динамически подключаемая библиотека . Классы библиотеки загружаются в памяти динамически во время работы программы.
Когда программа ссылается на метод класса библиотеке, этот класс будет загружен в память, и JIT-компилятор преобразует метод в машинный код, который сможет выполняться. Если класс вообще не используется, он не загружается в память. Использование динамических библиотек позволяет сохранить память за счет небольшой дополнительной работы при выполнении программы.
Динамические библиотеки можно использовать в других программах без необходимости использования исходного кода этих библиотек.
Рис. 5.6. Список ссылок проекта в обозревателе решений
Раздел Ссылки проекта содержит список всех ресурсов , которые использует приложение. При создании проекта определенного типа Visual Studio добавляет ссылки на ресурсы , которые требуются для построения проекта . Этим списком можно управлять самостоятельно. Например, для использования акселерометра в приложении для Windows Phone необходимо добавить ссылку на пространство имен Microsoft.Devices.Sensors.
Отметим, что при добавлении ссылки на ресурс он не обязательно станет частью проекта — сборка должна иметь возможность использовать этот ресурсу при работе. Если ресурс не будет доступен во время выполнения, то произойдет аварийное завершение работы программы. Ресурсы имеют номер версии. Если в систему будет добавлена новая версия библиотеки, любые более старые программы смогут использовать предыдущую версию.
Все управляемые ресурсы, которые нужно редактировать, должны быть связанными ресурсами. Редакторы ресурсов Visual Studio не поддерживают редактирование внедренных ресурсов.
Термин файл ресурсов может ссылаться на несколько типов файлов, например:
файл описания ресурсов программы (RC);
файл шаблона ресурсов (RCT);
Отдельный ресурс, существующий как отдельный файл. Этот тип включает точечный рисунок, значок или файл курсора, на который ссылается RC-файл.
Файл заголовка, созданный средой разработки. Этот тип включает Resource.h , который называется из RC-файла.
Ресурсы, найденные в других типах файлов, таких как .exe, .dll и Res, называются ресурсами.
В проекте можно работать с файлами ресурсов и ресурсами . Можно также работать с теми, которые не являются частью текущего проекта или были созданы вне среды разработки Visual Studio. Например, администратор может сделать следующее:
Работать с вложенными и условно включенными файлами ресурсов.
Обновите существующие ресурсы или преобразуйте их в Visual C++.
Импортировать графические ресурсы в текущий файл ресурсов или экспортировать их из него.
Включать общие или доступные только для чтения идентификаторы (символы), которые нельзя изменить с помощью среды разработки.
Включите в исполняемый файл (.exe) ресурсы, которые не нуждаются в редактировании (или не должны быть изменены), например общие ресурсы между несколькими проектами.
Включать типы ресурсов, не поддерживаемые средой разработки.
Изменяемые ресурсы
Чтобы изменить содержащиеся в них ресурсы, можно открыть следующие типы файлов:
Имя файла | Описание |
---|---|
.rc | Файлы скриптов ресурсов |
.rct | Файлы шаблонов ресурсов |
RES | Файлы ресурсов |
RESX | Управляемые файлы ресурсов |
EXE | Исполняемые файлы |
DLL | Файлы библиотек динамической компоновки |
.bmp, ICO, DIB, cur | Точечные рисунки, значки, панели инструментов и файлы курсоров |
при редактировании ресурсов среда Visual Studio работает с и влияет на следующие файлы:
Редакторы ресурсов не читают файлы RC или resource. h напрямую. Компилятор ресурсов компилирует их в APS файлы, используемые редакторами ресурсов. Этот файл представляет собой этап компиляции и содержит только символьные данные.
Как и в случае обычного процесса компиляции, сведения, не являющиеся символьными, например комментарии, удаляются во время компиляции.
Если файл APS не синхронизирован с RC-файлом, RC-файл создается повторно. Например, при сохранении редактор ресурсов перезаписывает файл. RC и файл Resource. h. Любые изменения в ресурсах остаются включенными в RC-файл, но при перезаписании RC-файла комментарии всегда будут потеряны. Сведения о том, как сохранять комментарии, см. в разделе Включение ресурсов во время компиляции.
Ресурсы манифеста
В проектах классических приложений C++ Ресурсы манифеста представляют собой XML-файлы, описывающие зависимости, используемые приложением. например, в Visual Studio файл манифеста, созданный мастером MFC, определяет версию Windows общих библиотек управления, которые приложение должно использовать:
для приложения Windows XP или Windows Vista ресурс манифеста должен указывать самую последнюю версию Windows стандартных элементов управления для использования приложением. В приведенном выше примере используется версия 6.0.0.0 , которая поддерживает элемент управления Syslink.
Допускается иметь только один ресурс манифеста на каждый модуль.
чтобы просмотреть сведения о версии и типе, содержащиеся в ресурсе манифеста, откройте файл в средстве просмотра XML-файлов или Visual Studio текстовом редакторе. Если вы откроете ресурс манифеста из представления ресурсов, этот ресурс откроется в двоичном формате.
Открытие ресурса манифеста
откройте проект в Visual Studio и перейдите к обозреватель решений.
Разверните папку файлы ресурсов , а затем:
Чтобы открыть его в текстовом редакторе, дважды щелкните файл . manifest .
Чтобы открыть в другом редакторе, щелкните правой кнопкой мыши файл manifest и выберите команду Открыть с помощью. Укажите используемый редактор и нажмите кнопку Открыть.
Прежде чем посмотреть, как применять ресурсы для локализации приложений, сначала ознакомимся с методами создания и чтения ресурсов без принятия во внимание языковых аспектов.
Создание файлов ресурсов
В файлах ресурсов могут храниться элементы, подобные изображениям и таблицам строк. В качестве ресурсного файла может быть обычный текстовый файл или файл с расширением .resX, в котором используется XML. В этой статье сначала рассматривается вариант простого текстового файла.
Ресурс, включающий в себя таблицу строк, может создаваться в обычном текстовом файле. В этом файле просто производится назначение строк ключам. Под ключом понимается имя, которое может использоваться в программе для получения соответствующего значения. В ключах и значениях допускается использовать пробелы.
Ниже показан пример создания простой таблицы строк:
Утилита Resgen.exe
Для создания из ***.txt файла ресурсов можно воспользоваться специальной утилитой генерации файлов ресурсов Resgen.exe. Например, ввод следующей команды:
приведет к созданию файла MyResources.resources. Сгенерированный этой утилитой файл ресурсов далее можно либо добавить в сборку как внешний файл, либо вставить в сборку DLL или ЕХЕ. Утилита Resgen также поддерживает возможность создания файлов ресурсов в формате XML с расширением .resX. Применяется она очень просто:
Выполнение этой команды приведет к созданию XML-файла ресурсов по имени MyResources.resX.
Утилита Resgen поддерживает строго типизированные ресурсы. Строго типизированный ресурс представляется в виде класса, который получает доступ к ресурсам. Для создания такого класса в утилите Resgen предусмотрена опция /str:
После опции /str должен быть указан язык, пространство имен, имя класса и имя файла исходного кода, причем именно в таком порядке.
Класс ResourceWriter
Вместо использования для создания файлов ресурсов утилиты Resgen можно написать специальную, позволяющую это делать программу. Класс ResourceWriter из пространства имен System.Resources служит для создания бинарных файлов ресурсов, а класс ResXResourceWriter — для создания файлов ресурсов на базе XML. Оба эти класса поддерживают возможность добавления изображений и любых других сериализуемых объектов. В случае применения класса ResXResourceWriter потребуется сослаться на сборку System.Windows.Forms.
В следующем примере кода демонстрируется создание объекта ResXResourceWriter по имени rw в файле Demo.resx. После создания экземпляра с помощью метода AddResource() класса ResXResourceWriter можно приступать к добавлению набора ресурсов общим объемом до 2 Гбайт. Первый аргумент в AddResource() позволяет указывать имя ресурса, а второй — значение. Ресурс изображения можно добавлять за счет применения экземпляра класса Image. Чтобы можно было использовать класс Image, необходимо сослаться на сборку System.Drawing, а также добавить директиву using для открытия пространства имен System.Drawing.
Здесь объект Image создается за счет открытия файла logo.jpg, поэтому потребуется либо скопировать этот файл изображения в каталог исполняемой программы, либо указать полный путь к нему в аргументе метода ImageToFile(). Оператор using указывает, что ресурс изображения должен автоматически уничтожаться в конце блока using.
Далее в объект ResXResourceWriter добавляются простые строковые ресурсы. В конце метод Close() класса ResXResourceWriter автоматически вызывает ResXResourceWriter.Generate() для осуществления записи ресурсов в файл Demo.resx:
Запуск этой небольшой программы приведет к созданию файла ресурсов Demo.resx с изображением logo.jpg внутри.
Использование файлов ресурсов
Добавьте в этот проект созданный ранее файл ресурсов Demo.resx, открыв в окне Solution Explorer контекстное меню и выбрав в нем пункт Add --> Add Existing Item (Добавить --> Добавить существующий элемент). По умолчанию для свойства Build Action (Действие при компоновке) этого ресурса будет установлено значение Embedded Resource (Встраиваемый ресурс), указывающее, что этот ресурс должен встраиваться в выходную сборку.
Далее в параметрах проекта (за счет выбора Application --> Assembly information (Приложение --> Информация о сборке)) следует установить в качестве значения параметра Neutral Language (Нейтральный язык) основной язык:
Изменение значения этого параметра приведет к добавлению в файл assemblyinfо.cs атрибута [NeutralResourceLanguageAttribute], как показано ниже:
Установка значения для данного атрибута улучшит производительность ResourceManager, поскольку позволит ему быстрее отыскивать ресурсы для en-US, а также использовать их в качестве варианта по умолчанию. В этом атрибуте можно также указать место размещения используемого по умолчанию ресурса за счет применения второго параметра в конструкторе. С помощью перечисления UltimateResourceFallbackLocation можно указать, что он должен размещаться в главной сборке (значение MainAssembly) или же в подчиненной (значение Satellite).
После компоновки проекта можно просмотреть сгенерированную сборку утилитой ildasm и увидеть в манифесте атрибут, .mresource. Атрибут .mresource объявляет имя для ресурса в сборке. Если .mresource объявлен public (как в данном примере), это означает, что ресурс может экспортироваться из сборки и использоваться в классах других сборок. Если же .mresource объявлен private, это значит, что ресурс экспортироваться не может и доступен только в пределах данной сборки.
Для получения доступа к встроенному ресурсу используется класс ResourceManager, который находится в пространстве имен System.Resources. Конструктору этого класса в качестве аргумента можно передать имя сборки, в которой содержатся ресурсы.
В рассматриваемом примере ресурсы встроены в исполняемую сборку, поэтому во втором аргументе конструктору должен быть передан результат выполнения метода Assembly.GetExecutingAssembly(). В первом аргументе передается корневое имя ресурсов, состоящее из названия пространства имен и имени файла ресурсов, но без расширения resources. Как было показано ранее, это имя можно отобразить с помощью утилиты ildasm и просто удалить из него расширение resources. Имя можно также получить и программно с применением метода GetManifestResourceNames() класса System.Reflection.Assembly:
Для создания строго типизированного ресурса в редакторе управляемых ресурсов (Managed Resources Editor) можно изменить значение параметра Access Modifier (Модификатор доступа) с No Code Generation (Не генерировать никакой код) на Public (Общедоступный) или Internal (Внутренний). В случае установки значения Public генерируемый класс снабжается модификатором доступа public и тогда к нему возможен доступ из других сборок. При установке значения Internal генерируемый класс получает модификатор доступа internal и доступ к нему может осуществляться только изнутри сборки, в которой он находится.
Пространство имен System.Resources
Давайте кратко пройдемся по всем классам, которые содержатся в пространстве имен System.Resources и позволяют работать с ресурсами.
Класс ResourceManager
Может использоваться для получения ресурсов, относящихся к текущей культуре, из сборок или файлов ресурсов. С помощью ResourceManager можно получать сразу целый набор ресурсов для определенной культуры в виде экземпляра ResourceSet.
Класс ResourceSet
Позволяет представлять набор ресурсов для определенной культуры. При создании экземпляр ResourceSet он производит перечисление по классу, реализуя интерфейс IResourceReader, и сохраняет все ресурсы в HashTable.
Интерфейс IResourceReader
Используется в ResourceSet для перечисления ресурсов. Класс ResourceReader реализует этот интерфейс.
Класс ResourceWriter
Применяется для создания файла ресурсов и реализует интерфейс IResourceWriter.
Классы ResXResourceSet, ResXResourceReader и ResXResourceWriter
Похожи на классы ResourceSet, ResourceReader и ResourceWriter, но служат для создания не бинарного файла ресурсов, а не XML-файла .resx. Вместо того чтобы встраивать ресурс в XML-файл, они позволяют добавлять на него ссылку с помощью ResXFileRef.
Пространство имен System.Resources.Tools
Содержит класс StronglyTypedResourceBuilder, который можно использовать для создания класса из ресурса.
Внедрил три текстовых файла в проект. Думал они все время будут в проекте, однако они ссылаются на файлы в папке debug, что не есть хорошо, так как если этих файлов нет на диске - то и при компиляции возникают ошибки.
Для добавления ресурсов в проект необходимо щелкнуть правой кнопкой мыши узел Свойства в проекте в Обозревателе решений, щелкнуть Открыть, а затем на странице Ресурсы в Конструкторе проектов нажать кнопку Добавить ресурс. Ресурсы можно добавить в проект в качестве связанных ресурсов (внешние файлы) или как внедренные ресурсы (внедренные непосредственно в файл RESX).
- При добавлении связанного ресурса в файле RESX со сведениями о ресурсах проекта будет указан только относительный путь на файл ресурса на диске. Если в качестве связанных ресурсов добавить изображения, видео или другие сложные файлы, их можно будет изменять в редакторе по умолчанию, сопоставленном с соответствующим типом файла в конструкторе ресурсов.
- В случае внедренных ресурсов, данные хранятся непосредственно в файле ресурсов проекта (RESX). Строки могут храниться только как внедренные ресурсы.
После добавления файлов в ресурсы, добавленные файлы помещаются в папку Resources, находящуюся в корне проекта.
Также можно задать действие при построении:
- None — файл не включается в выходную группу проекта и не компилируется в процессе построения. Примером такого файла является текстовый файл документации, например файл Readme.
- Compile — файл компилируется в выходные файлы построения. Эта настройка используется для файлов кода.
- Content — файл не компилируется, но включается в выходную группу "Содержимое". Этот вариант используется по умолчанию для файлов HTM и других веб-файлов.
- Embedded Resource — файл внедряется в основные выходные файлы построения проекта в виде DLL или исполняемого файла. Обычно это значение используется для файлов ресурсов.
Для задания свойства Действие при построении ( Build Action ) или свойства Копировать в выходной каталог( Copy to Output Directory ) необходимо зайти в свойства у файла ресурсов и изменить необходимое свойство.
Собственно говоря, Вас интересует свойство Действие при построении ( Build Action ) - которое необходимо указать под Ваши нужды.
Спасибо за любую помощь.
вы можете добавить ресурсы.resx файл файл в ваш проект и добавить ресурсы, такие как изображения, строки, файлы к нему. Затем вы можете ссылаться на эти ресурсы через автоматически генерируемые Resources класса. По умолчанию Visual Studio создает ресурсы.resx файл на свойства
встроить в ресурсы.resx файл
Resources.resx должен был быть создан при создании проекта WinForms. Вы можете просмотреть его в Properties на Solution Explorer .
двойной клик Resources.resx , чтобы открыть конструктор. Вы можете скопировать из Windows Explorer и вставьте в конструктор ресурсов VS. Этот инструмент достаточно умен, чтобы выяснить, какой тип ресурса, и на снимке экрана ниже показано, что аналогичные типы ресурсов сгруппированы вместе в раскрывающемся списке строки меню.
С этого момента вы можете следовать принятому ответу и вручную назначить ресурс свойству элемента управления.
этого.Раздел Backgroundimage = "Свойства".Ресурсы.MyImage;
вставить в форму через designer
используя конструктор, вы можете встроить ресурс в форма .resx . Выберите элемент управления в конструкторе и откройте
вы всегда можете сделать это таким образом.
перейти к проекту-->свойства проекта (всегда имя проекта + свойства)-->ресурсы
в верхней строке меню вы найдете поле со списком, где вы выберете, какой тип элемента вы хотите использовать в качестве ресурса.
пример: Если вам нужно изменить значок для формы(тот, который появляется в верхней левой части формы), вы затем загрузите ".файл ICO". Если вам нужно вставить изображение кнопки, вы должны загрузить ".PNG-файл. Вы можете видеть это Resx файлы учебник youtube видео, где это объясняется отлично
после этого вы выбираете элемент управления, в который хотите вставить изображение, и переходите к свойствам-->Image и выберите изображение, которое вы только что добавили из файла ресурсов проекта.
Ниже приведен код для извлечения изображения из папки ресурсов. Обычно мы храним изображения в папке Resources. но иногда у нас есть только имя образа. в этом случае вы можете получить доступ к изображениям из папки ресурсов, используя только имя изображения.
Читайте также: