Как внедрить и получить доступ к ресурсам с помощью .NET, Visual Basic или Visual Basic 2005

ВНИМАНИЕ! Данная статья переведена с использованием программного обеспечения Майкрософт для машинного перевода и, возможно, отредактирована посредством технологии Community Translation Framework (CTF). Корпорация Майкрософт предлагает вам статьи, обработанные средствами машинного перевода, отредактированные членами сообщества Майкрософт и переведенные профессиональными переводчиками, чтобы вы могли ознакомиться со всеми статьями нашей базы знаний на нескольких языках. Статьи, переведенные с использованием средств машинного перевода и отредактированные сообществом, могут содержать смысловое, синтаксические и (или) грамматические ошибки. Корпорация Майкрософт не несет ответственности за любые неточности, ошибки или ущерб, вызванные неправильным переводом контента или его использованием нашими клиентами. Подробнее об CTF можно узнать по адресу http://support.microsoft.com/gp/machine-translation-corrections/ru.

Эта статья на английском языке: 319291
Аннотация
В данной статье описывается использование ресурсов как часть сборки и затем получить доступ к ресурсам во время выполнения .NET по Visual Basic Microsoft или Microsoft Visual Basic 2005.

back to the top

Обзор

Платформа.NET Framework может инкапсулировать файлы как часть скомпилированной сборки. Эти файлы известны как внедренные ресурсы. Эти ресурсы полностью отделены от файлов .resources или .resx, связанные со сборкой. Эти ресурсы доступны во время выполнения с помощью класса сборки , пространства имен System.Reflection .

Основным преимуществом внедрение ресурсов в манифест является, поскольку файлы являются частью скомпилированной сборки, пользователь не может случайного удаления или потеряли файлы, которые важны для приложения, который в некоторых случаях может запретить выполнение программы. Единственным ограничением такого подхода является не удается сохранить изменения в этот файл в сборку без перекомпиляции программы. По этой причине включаются только файлы, которые не изменится в течение срока существования приложения в качестве внедренного ресурса.

back to the top

Пошаговая демонстрация

Добавление внедренных ресурсов в проект, необходимо сначала добавить файлы как часть проекта. После добавления файлов в проект, можно получить доступ к и отображать ресурсы через пространство имен System.Reflection .

back to the top

Добавление внедренных ресурсов

Чтобы добавить текстовый файл и файл изображения в проект как внедренные ресурсы, выполните следующие действия.
  1. Создание нового проекта приложения Windows для thisdemonstration. Эта форма используется для отображения ресурсов, accessedfrom выполняемой сборки во время выполнения.
  2. Щелкните правой кнопкой мыши имя проекта, нажмите кнопку Добавить и выберите команду Добавить новый элемент.
  3. В диалоговом окне Новый элемент меню выберите Текстовый файл и назовите файл MyTextFile.txt. При fileopens в интегрированной среде разработки (IDE), добавление текста и файл thenclose.
  4. Повторите шаги 1 и 2, чтобы добавить в проект, но вместо выбора Текстового файла с новым типом элемента растрового изображения, выберите Файл точечного рисункаи измените имя на MyImage.bmp. При открытии нового изображения в Интегрированной среде разработки, нарисовать что-нибудь на theimage и закройте файл.
  5. Щелкните правой кнопкой мыши либо в текстовый файл или растрового изображения и thenselect Свойства.
  6. В диалоговом окне свойств найдите свойство Действие при построении . По умолчанию это свойство имеет значение для содержимого. Выберите свойство и измените свойство Действие при построении значение Внедренный ресурс.
  7. Повторите шаги 4 и 5 для других файлов.
В следующий раз при построении проекта компилятор добавляет эти файлы сборки. Компилятор добавляет корневое пространство имен проекта на имя ресурса, когда он будет включен в проект. Например если корневое пространство имен проекта MyNamespace, ресурсы называются MyNamespace.MyTextFile.txt и MyNamespace.MyImage.bmp.

Примечание Имена файлов ресурсов учитывается регистр. При доступе к ресурсам, необходимо использовать точное написание и регистр имени файла. Если вы не используете точное написание и регистр знаков в имени файла, вызов метода доступа к ManifestResourceStream возвращает Nothingи системы не вызывает исключение.

Примечание Если вы хотите проверить имена ресурсов, можно использовать для просмотра данных манифеста, который список ресурсов, включенных Microsoft промежуточного языка дизассемблер (ILDASM).

back to the top

Доступ к ресурсам

Доступ к ресурсам, которые внедрены в манифесте сборки, импорта System.IO и пространствах имен System.Reflection , следующим образом:
   Imports System.IO   Imports System.Reflection				
Пространство имен System.IO предоставляет определение потока и пространство имен System.Reflection определяет класс сборки , который предоставляет методы для доступа к ресурсам, которые внедрены в сборку.

При объявлении следующие действия в области Общая декларация ресурсов из сборки считываются при загрузке формы:
   Dim _imageStream As Stream   Dim _textStreamReader As StreamReader   Dim _assembly As [Assembly]				
Примечание Для доступа к событию Load для формы в редакторе кода, дважды щелкните форму в редакторе макета.

Чтобы прочитать ресурса из сборки, выполняющего текущий код, необходимо получить экземпляр этой сборки. Чтобы сделать это, используйте метод GetExecutingAssembly сборки, следующим образом:
   _assembly = [Assembly].GetExecutingAssembly()				
Чтение информации из ресурса в поток выполняется с помощью вызова метода GetManifestResourceStream. Параметр, передаваемый данному методу — имя ресурса, который осуществляется. Два ресурса затем прочитайте в их соответствующие потоки, когда выполняется событие Load формы.
   _imageStream =  _assembly.GetManifestResourceStream("MyNameSpace.MyImage.bmp")   _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNameSpace.MyTextFile.txt"))				
Код в событие Load для формы будет выглядеть примерно так:
   Try      _assembly = [Assembly].GetExecutingAssembly()      _imageStream =  _assembly.GetManifestResourceStream("MyNameSpace.MyImage.bmp")      _textStreamReader = New StreamReader(_assembly.GetManifestResourceStream("MyNamespace.MyTextFile.txt"))   Catch ex As Exception      MessageBox.Show("Resource wasn't found!", "Error")   End Try				
Оператор Try-Catch , называемый структурной обработки в [.NET, используется для перехвата ошибок, произошедших во время экземпляр класса сборки имеет доступ к ресурсам.

back to the top

Показать ресурсы

В этом примере используется две кнопки для отображения внедренных ресурсов. При нажатии первой кнопки растрового изображения, который основан на ресурс, который считывается из сборки создается и отображается в элементе управления PictureBox формы. Вторая кнопка считывает из текстового ресурса и отображает текст в текстовом поле.

Чтобы отобразить внедренных ресурсов, выполните следующие действия.
  1. Добавьте в форму элемент управления PictureBox .
  2. Добавьте новый элемент управления Button в форму и измените его свойство Text на Отображение изображения.
  3. Дважды щелкните кнопку, чтобы открыть в средстве просмотра кода события Click , а затем вставьте следующий код в данном событии:
       Try      PictureBox1.Image = New Bitmap(_imageStream)   Catch ex As Exception      MessageBox.Show("Image Couldn't be created !")   End Try					
    Этот код создает новый экземпляр растрового изображения, который основан на theresource потока, которая считывается в событии Load формы.

  4. Добавьте в форму элемент управления TextBox .
  5. Добавьте другой элемент управления Button в форму и измените его свойство Text для Получения текста.
  6. Дважды щелкните кнопку в редакторе макета для открытия Click_Event для кнопки и вставьте следующий код в событие:
       Try      If _textStreamReader.Peek() <> -1 Then         TextBox1.Text = _textStreamReader.ReadLine()      End If   Catch ex As Exception      MessageBox.Show("Error reading stream!")   End Try					
    Этот код определяет, существует ли по-прежнему для чтения символов в thestream. При обнаружении символов строки считываются в текстовом поле.
  7. Нажмите клавишу F5 для запуска приложения.
back to the top

Полный текст кода

   Imports System.IO   Imports System.Reflection   Public Class Form1      Inherits System.Windows.Forms.Form   #Region " Windows Form Designer generated code "      Public Sub New()         MyBase.New()         'This call is required by the Windows Form Designer.         InitializeComponent()          'Add any initialization after the InitializeComponent() call.      End Sub      'Form overrides dispose to clean up the component list.      Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)         If disposing Then            If Not (components Is Nothing) Then               components.Dispose()            End If         End If         MyBase.Dispose(disposing)      End Sub      'Required by the Windows Form Designer.      Private components As System.ComponentModel.IContainer       'NOTE: The following procedure is required by the Windows Form Designer.      'It can be modified using the Windows Form Designer.        'Do not modify it using the code editor.      Friend WithEvents Button1 As System.Windows.Forms.Button      Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox      Friend WithEvents Button2 As System.Windows.Forms.Button      Friend WithEvents TextBox1 As System.Windows.Forms.TextBox      <System.Diagnostics.DebuggerStepThrough()> Private Sub  InitializeComponent()         Me.Button1 = New System.Windows.Forms.Button()         Me.PictureBox1 = New System.Windows.Forms.PictureBox()         Me.Button2 = New System.Windows.Forms.Button()         Me.TextBox1 = New System.Windows.Forms.TextBox()         Me.SuspendLayout()         '         'Button1         '         Me.Button1.Location = New System.Drawing.Point(16, 196)         Me.Button1.Name = "Button1"         Me.Button1.TabIndex = 0         Me.Button1.Text = "Show Image"         '         'PictureBox1         '         Me.PictureBox1.Location = New System.Drawing.Point(8, 8)         Me.PictureBox1.Name = "PictureBox1"         Me.PictureBox1.Size = New System.Drawing.Size(280, 184)         Me.PictureBox1.TabIndex = 1         Me.PictureBox1.TabStop = False         '         'Button2         '         Me.Button2.Location = New System.Drawing.Point(16, 232)         Me.Button2.Name = "Button2"         Me.Button2.TabIndex = 2         Me.Button2.Text = "Get Text"         '         'TextBox1         '         Me.TextBox1.Location = New System.Drawing.Point(100, 232)         Me.TextBox1.Name = "TextBox1"         Me.TextBox1.Size = New System.Drawing.Size(176, 20)         Me.TextBox1.TabIndex = 3         Me.TextBox1.Text = "TextBox1"         '         'Form1         '         Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)         Me.ClientSize = New System.Drawing.Size(292, 266)         Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.TextBox1, Me.Button2, Me.PictureBox1, Me.Button1})         Me.Name = "Form1"         Me.Text = "Form1"         Me.ResumeLayout(False)      End Sub   #End Region      Dim _imageStream As Stream      Dim _textStreamReader As StreamReader      Dim _assembly As [Assembly]      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load         Try            _assembly = [Assembly].GetExecutingAssembly()            _imageStream = _assembly.GetManifestResourceStream("MyNamespace.MyImage.bmp")            _textStreamReader = New StreamReader(_assembly.GetManifestResourceStream("MyNamespace.MyTextFile.txt"))         Catch ex As Exception            MessageBox.Show("Resource wasn't found!", "Error")         End Try      End Sub      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click         Try            PictureBox1.Image = New Bitmap(_imageStream)         Catch ex As Exception            MessageBox.Show("Image Couldn't be created !")         End Try      End Sub      Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click         Try            If _textStreamReader.Peek() <> -1 Then               TextBox1.Text = _textStreamReader.ReadLine()            End If         Catch ex As Exception            MessageBox.Show("Error reading stream!")         End Try      End Sub   End Class				
Примечание Код должен быть изменен в Visual Basic 2005. Если создать новую форму с именем Form1 в Visual Basic 2005, для кода создается файл Form1.vb и создается файл Form1.Designer.vb, содержащий автоматически созданный компонент. Конструктор Windows Forms использует ключевое слово partial для реализации Form1 делится на два отдельных файла. Это предотвращает созданный конструктором код перемежаемых кода.

Дополнительные сведения о новых улучшений языка Visual Basic 2005 посетите следующий веб-узел Microsoft Developer Network (MSDN):
Дополнительные сведения о разделяемых классах и в конструктор Windows Forms обратитесь на веб-узле MSDN:back to the top

Устранение неполадок

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

back to the top
Ссылки
Дополнительные сведения см. ниже веб-узлов Microsoft Developer Network (MSDN): back to the top

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 319291 — последний просмотр: 01/17/2016 08:19:00 — редакция: 5.0

Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic 2005

  • kbvs2005swept kbvs2005applies kbhowtomaster kbmt KB319291 KbMtru
Отзывы и предложения