Einbetten und Zugriff auf Ressourcen mithilfe von Visual Basic .NET oder Visual Basic 2005

Wichtig: Dieser Artikel wurde maschinell übersetzt und wird dann möglicherweise mithilfe des Community Translation Framework (CTF) von Mitgliedern unserer Microsoft Community nachbearbeitet. Weitere Informationen zu CTF finden Sie unter http://support.microsoft.com/gp/machine-translation-corrections/de.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 319291
Eine Microsoft C# .NET Version dieses Artikels finden Sie unter 319292.
Eine Microsoft Visual Basic 6.0-Version dieses Artikels finden Sie unter 205332.

IN DIESER AUFGABE

Zusammenfassung
Dieser Artikel beschreibt, wie Microsoft Visual Basic .NET oder Microsoft Visual Basic 2005 Ressourcen als Teil der Assembly einbetten und dann zur Laufzeit auf die Ressourcen zugreifen.

back to the top

(Übersicht)

Das.NET Framework kann Dateien als Teil einer kompilierten Assembly kapseln. Diese Dateien werden als eingebettete Ressourcen bezeichnet. Diese Ressourcen sind völlig unabhängig von der Resources- oder RESX-Dateien, die der Assembly zugeordnet sind. Auf diese Ressourcen können Sie zur Laufzeit mithilfe des System.Reflection -Namespace der Assembly -Klasse zugreifen.

Ein großer Vorteil des Einbettens von Ressourcen ins Manifest ist, dass Dateien die für Ihre Anwendung unverzichtbar sind, Teil der kompilierten Assembly werden. Dadurch können sie vom Benutzer nicht aus Versehen gelöscht oder verschoben werden. Dies kann in einigen Fällen möglicherweise die Ausführung des Programms verhindern. Ein Nachteil dieses Ansatzes ist, dass Sie keine Änderungen an dieser Datei auf die Assembly speichern können, ohne die Anwendung neu zu kompilieren. Deshalb sind Dateien, die nicht während der Lebensdauer der Anwendung als eingebettete Ressource ändert nur.

back to the top

Schrittweise demonstration

Um eingebettete Ressourcen zum Projekt hinzuzufügen, müssen Sie zuerst die Dateien als Teil des Projekts hinzufügen. Nachdem Sie die Dateien dem Projekt hinzugefügt haben, können Sie über den System.Reflection -Namespace auf die Ressourcen zugreifen bzw. sie anzeigen.

back to the top

Hinzufügen von eingebetteten Ressourcen

Um eine Textdatei und eine Image-Datei dem Projekt als eingebettete Ressourcen hinzuzufügen, gehen Sie folgendermaßen vor:
  1. Erstellen Sie ein neues Windows-Anwendungsprojekt für Thisdemonstration. Dieses Formular wird verwendet, um die Ressourcen anzuzeigen, Accessedfrom die ausführende Assembly zur Laufzeit.
  2. Maustaste auf Ihr Projekt Hinzufügen, und klicken Sie dann auf Neues Element hinzufügen.
  3. Klicken Sie im Dialogfeld Neues Element Menü Datei und benennen Sie die Datei MyTextFile.txt. Wenn die Fileopens in der integrierten Entwicklungsumgbung (IDE), Text, und die Datei Thenclose hinzufügen.
  4. Wiederholen Sie die Schritte 1 und 2 ein Bitmapbild dem Projekt jedoch statt Textdatei als neue Elementtyp hinzufügen und ändern Sie den Dateinamen in MyImage.bmpwählen Sie Bitmap-Datei aus. Wenn das neue Bild in der IDE geöffnet ist, schließen Sie die Datei zeichnen Sie etwas Theimage
  5. Klicken Sie auf entweder die Textdatei oder Bitmap, und wählen Sie anschließend Eigenschaften.
  6. Suchen Sie im Dialogfeld Eigenschaften die Eigenschaft Buildvorgang . Standardmäßig ist diese Eigenschaft auf Inhaltfestgelegt. Klicken Sie auf die Eigenschaft, und ändern Sie die Build Action -Eigenschaft in Eingebettete Ressource.
  7. Wiederholen Sie die Schritte 4 und 5 für die Datei.
Das nächste Mal, wenn Sie das Projekt erstellen, fügt der Compiler diese Dateien der Assembly hinzu. Der Compiler fügt den Stammnamespace des Projekts auf den Namen der Ressource, wenn im Projekt enthalten ist. Beispielsweise ist der Stammnamespace des Projekts MyNamespace Ressourcen MyNamespace.MyTextFile.txt und MyNamespace.MyImage.bmp heißen.

Hinweis Ressourcendateien werden beachtet. Zugriff auf die Ressourcen müssen Sie die Schreibweise und Groß-/Kleinschreibung des Dateinamens verwenden. Verwenden Sie nicht die genaue Schreibweise und Groß-/Kleinschreibung von Dateinamen Methodenaufruf auf ManifestResourceStream gibt und das System keinelöst keine Ausnahme.

Hinweis Wenn Sie überprüfen, die Ressourcennamen möchten, können Microsoft Intermediate Language Disassembler (ILDASM) Sie die Manifestdaten anzeigen enthaltenen Ressourcen.

back to the top

Zugriff auf Ressourcen

Importieren Sie Zugriff auf die Ressourcen, die im Manifest der Assembly eingebetteten System.IO und Namespaces System.Reflection wie folgt:
   Imports System.IO   Imports System.Reflection				
Der System.IO -Namespace enthält die Definition eines Streams und System.Reflection -Namespace definiert die Assembly Klasse mit Methoden, um auf die Ressourcen zugreifen, die in die Assembly eingebettet sind.

Wenn Sie das Folgende im allgemeinen Deklarationsbereich deklarieren, werden die Ressourcen aus der Assembly beim Laden des Formulars gelesen.
   Dim _imageStream As Stream   Dim _textStreamReader As StreamReader   Dim _assembly As [Assembly]				
Hinweis Um das Load -Ereignis für das Formular im Code-Editor zuzugreifen, doppelklicken Sie auf das Formular in der Entwurfsansicht.

Um die Ressource aus der Assembly zu lesen, die den aktuellen Code ausgeführt wird, benötigen Sie eine Instanz der Assembly. Hierzu verwenden Sie die GetExecutingAssembly -Methode der Assembly wie folgt:
   _assembly = [Assembly].GetExecutingAssembly()				
Lesen die Informationen aus der Ressource in einen Stream erfolgt ein Aufruf der GetManifestResourceStream. An diese Methode übergebene Parameter ist der Name der Ressource zugegriffen werden. Die Ressourcen werden dann in ihre entsprechenden Streams gelesen, wenn das Load -Ereignis des Formulars ausgeführt wird.
   _imageStream =  _assembly.GetManifestResourceStream("MyNameSpace.MyImage.bmp")   _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNameSpace.MyTextFile.txt"))				
Der Code im Load -Ereignis für das Formular folgendermaßen aussehen:
   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				
Die Try-Catch -Anweisung strukturierte Fehlerbehandlung in .NET genannt wird verwendet, um Fehler abzufangen, die auftreten können, während die Instanz der Assembly -Klasse auf die Ressourcen zugreift.

back to the top

Ressourcen anzeigen

Dieses Beispiel verwendet zwei Schaltflächen eingebetteten Ressourcen anzeigen. Beim Klicken auf die erste Schaltfläche ist eine Bitmap, die auf die Ressource, die aus der Assembly erstellt und in das PictureBox -Steuerelement des Formulars angezeigt. Die zweite Schaltfläche von einer Textressource liest und zeigt den Text in einem Textfeld.

Gehen Sie folgendermaßen vor, um die eingebetteten Ressourcen anzuzeigen:
  1. Ein PictureBox -Steuerelement zum Formular hinzufügen.
  2. Fügen Sie ein Button -Steuerelement zum Formular hinzu, und ändern Sie die Texteigenschaft in Bild anzeigen.
  3. Doppelklicken Sie auf die Schaltfläche Click -Ereignis im Code Viewer zu öffnen, und fügen Sie folgenden Code dieses Ereignis:
       Try      PictureBox1.Image = New Bitmap(_imageStream)   Catch ex As Exception      MessageBox.Show("Image Couldn't be created !")   End Try					
    Dieser Code generiert eine neue Instanz einer Bitmap Theresource Datenstrom basiert, die in das Load -Ereignis des Formulars gelesen wurde.

  4. Fügen Sie ein TextBox -Steuerelement auf das Formular.
  5. Fügen Sie ein weiteres Button -Steuerelement auf das Formular, und ändern Sie die Text -Eigenschaft Text Abzurufen.
  6. Doppelklicken Sie auf die Schaltfläche in der Entwurfsansicht, öffnen Sie die Click_Event für die Schaltfläche und fügen Sie folgenden Code im Ereignis:
       Try      If _textStreamReader.Peek() <> -1 Then         TextBox1.Text = _textStreamReader.ReadLine()      End If   Catch ex As Exception      MessageBox.Show("Error reading stream!")   End Try					
    Dieser Code bestimmt, ob im Thestream noch zu lesenden Zeichen vorhanden sind. Zeichen gefunden werden, wird eine Zeile im Textfeld gelesen.
  7. Drücken Sie F5, um die Anwendung auszuführen.
back to the top

Vollständigen code

   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				
Hinweis Der Code sollte in Visual Basic 2005 geändert werden. Wenn Sie erstellen ein neues Formular mit dem Namen Form1 in Visual Basic 2005 eine Datei Form1.vb für Code erstellt und Form1.Designer.vb-Datei erstellt enthält, den automatisch generierten Teil. Windows Forms-Designer verwendet das partial-Schlüsselwort auf die Implementierung von Form1 in zwei separate Dateien aufzuteilen. Dadurch wird verhindert, dass Designer ausgegebenen Code mit dem Code eingefügt.

Weitere Informationen über die neuen Funktionen von Visual Basic 2005 Sprache finden Sie auf der folgenden Microsoft Developer Network (MSDN)-Website:
Weitere Informationen zu partiellen Klassen und Windows Forms-Designer finden Sie auf der folgenden MSDN-Website:back to the top

Problembehandlung:

Da Ressourcennamen beachtet überprüfen Sie, dass die Schreibweise und Anfrage Zugriff auf Ressourcen. ILDASM können Manifestdaten überprüfen Sie die Schreibweise der Ressourcen gelesen werden.

back to the top
Informationsquellen
Weitere Informationen finden Sie auf folgenden Websites von Microsoft Developer Network (MSDN): back to the top

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 319291 – Letzte Überarbeitung: 07/25/2015 09:33:00 – Revision: 4.0

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

  • kbvs2005swept kbvs2005applies kbhowtomaster kbmt KB319291 KbMtde
Feedback