Explication détaillée de la façon d'intégrer et d'utiliser C# pour accéder au code de ressource

黄舟
Libérer: 2017-03-14 13:54:30
original
2133 Les gens l'ont consulté

Comment utiliser les ressources embarquées en

C# ?

Ce guide étape par étape montre comment utiliser C# pour intégrer une ressource dans le cadre d'un assembly, puis accéder à la ressource au moment de l'exécution.

Vue d'ensemble

Le .NET Framework peut encapsuler des fichiers dans le cadre d'un assembly compilé. Ces fichiers sont appelés ressources intégrées. Ces ressources sont des assemblys complètement distincts associés aux fichiers .resource et .resx. Vous pouvez accéder à ces ressources au moment de l'exécution via la classe Assembly dans l'espace de noms System.Reflection .

Le principal avantage des ressources manifestes intégrées est que, comme ces fichiers font partie de l'assembly compilé, les utilisateurs ne peuvent pas supprimer accidentellement ou les insérer par erreur dans votre application, ce qui dans certains cas. des fichiers vitaux peuvent empêcher l’exécution du programme. L'une des limites de cette approche est que vous ne pouvez enregistrer aucune modification apportée à l'assembly de ce fichier sans recompiler le programme. Pour cette raison, n'incluez que les fichiers qui ne changeront pas pendant la durée de vie de l'application en tant que ressources intégrées.

Démonstration étape par étape

Pour ajouter des ressources intégrées à votre projet, vous devez d'abord ajouter ces fichiers dans le cadre de votre projet. Après avoir ajouté des fichiers à votre projet, vous pouvez accéder et afficher les ressources dans l'espace de noms System.Reflection.

Ajouter des ressources intégrées

Pour ajouter des fichiers texte et des fichiers image à intégrer en tant que ressources dans votre projet, suivez ces étapes :

  1. Créez un nouveau projet d'application Windows pour cette démo. Ce formulaire est utilisé pour afficher les ressources accessibles au moment de l'exécution à partir d'un assembly en cours d'exécution.

  2. Cliquez avec le bouton droit sur le nom du projet, cliquez sur Ajouter, puis cliquez sur Ajouter un nouvel élément

  3. Dans la boîte de dialogue Nouveau projet, dans le menu, sélectionnez Fichier texte et nommez le fichier MonTexteFichier.txt. Ouvrez le fichier dans l'environnement de développement intégré (IDE), ajoutez du texte, puis fermez le fichier.

  4. Répétez les étapes 1 et 2 pour ajouter l'image bitmap au projet, mais au lieu de sélectionner Fichier texte comme nouveau type de projet, sélectionnez Fichier bitmap puis changez le nom du fichier en MyImage.bmp. Lorsque vous ouvrez une nouvelle image dans l'EDI, le contenu est dessiné sur l'image, puis le fichier est fermé.

  5. Cliquez avec le bouton droit sur le texte ou le bitmap du fichier et sélectionnez Propriétés

  6. Dans le Propriétés, recherchez la propriété Build Action. Par défaut, cette propriété est définie sur content. Cliquez sur la propriété et remplacez la propriété Build Action par Embedded Resource

  7. Répétez les étapes 4 et 5 pour l'autre fichier.

La prochaine fois que vous construirez votre projet, le compilateur ajoutera ces fichiers à votre assembly. Nom de la ressource à laquelle le compilateur ajoute l'espace de noms racine du projet lorsqu'elle est incluse dans un projet. Par exemple, si l'espace de noms racine de votre projet est MyNamespace, les ressources sont nommées MyNamespace.MyTextFile.txt et MyNamespace.MyImage.bmp.

Veuillez noter : les noms des fichiers de ressources sont sensibles à la casse. Lorsque vous accédez à une ressource, vous devez utiliser l'orthographe et la casse exactes du nom du fichier. Si vous n'utilisez pas l'orthographe et la casse exactes du nom de fichier, l'appel de méthode pour accéder à ManifestResourceStream renvoie n'effectue aucune action et le système ne déclenche pas anormal.

Remarque : Si vous souhaitez vérifier ces noms de ressources, vous pouvez utiliser le Microsoft Intermediate Language Disassembler (ILDASM) pour afficher les données du manifeste, qui répertorie les ressources incluses.

Accès aux ressources

Pour accéder aux ressources qui ont été intégrées dans le manifeste de votre assembly, importez System.IO et System.Reflection espace de noms, comme suit :

L'espace de noms
   using System.IO;
   using System.Reflection;				
Copier après la connexion

System.IO fournit des définitions de flux et de méthodes de classes fournies par les assemblys définis dans l'espace de noms System.Reflection, pour accéder ressources intégrées dans l’assembly.

Lire les ressources de l'assembly lorsque le formulaire est chargé lorsqu'il est déclaré dans la zone de déclaration générale suivante :

   Assembly _assembly;
   Stream _imageStream;
   StreamReader _textStreamReader;				
Copier après la connexion

Remarque : Pour accéder au Pour le Chargez l' événement du formulaire dans l'Éditeur de code, veuillez double-cliquer sur le formulaire dans l'Éditeur de conception.

Pour lire les ressources d'un assembly où le code actuel s'exécute, vous devez obtenir une instance de cet assembly. Pour ce faire, utilisez la méthode GetExecutingAssembly de l'assembly, comme suit :

   _assembly = Assembly.GetExecutingAssembly();				
Copier après la connexion

Pour lire les informations d'une ressource dans un flux, utilisez GetManifestResourceStream L'appel de méthode est exécuté. Le paramètre passé à cette méthode est le nom de la ressource à laquelle accéder. Exécutez l'événement Load du formulaire, puis lisez les deux ressources dans leurs flux correspondants.

   _imageStream = _assembly.GetManifestResourceStream("MyNameSpace.MyImage.bmp");
   _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNameSpace.MyTextFile.txt"));				
Copier après la connexion

Le code dans l'événement Load du formulaire est le suivant :

   try
   {
      _assembly = Assembly.GetExecutingAssembly();
      _imageStream = _assembly.GetManifestResourceStream("MyNamespace.MyImage.bmp");
      _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNamespace.MyTextFile.txt"));
   }
   catch
   {
      MessageBox.Show("Error accessing resources!");
   }				
Copier après la connexion

Instruction Try-catch, appelée In .NET, la gestion structuréedes erreurs est utilisée pour capturer toutes les erreurs qui peuvent survenir lorsqu'une instance d'une classe assembly accède à une ressource.

Afficher les ressources

Cet exemple utilise deux boutons pour afficher les ressources intégrées. Lorsque vous cliquez sur le premier bouton, une image bitmap basée sur la ressource lue à partir de l'assemblage est créée et affichée dans la zone ImageContrôle du formulaire. La ressource texte du deuxième bouton est lue et le texte affiché dans la zone de texte.

Pour afficher une ressource intégrée, suivez ces étapes :

  1. Ajoutez un contrôle Picture Box au formulaire.

  2. Ajoutez un nouveau contrôle Button au formulaire, puis modifiez sa propriété Text en Display Image

  3. Double-cliquez sur le bouton pour ouvrir son événement Click dans la visionneuse de code, puis collez dans ce cas le code suivant :

  4.    try
       {
          pictureBox1.Image = new Bitmap(_imageStream);			       }
       catch 
       {
          MessageBox.Show("Error creating image!");
       }					
    Copier après la connexion

    Ce code génère une nouvelle instance basée sur le bitmap du flux de ressources lu dans l'événement Load du formulaire.

  5. Ajoutez un contrôle TextBox au formulaire.

  6. Ajoutez un autre contrôle Button au formulaire, puis modifiez sa propriété Text en Get Text

  7. Double-cliquez sur le bouton dans l'éditeur de conception pour ouvrir le Click_Event, puis collez le code suivant dans l'événement :

  8.    try
       {
          if(_textStreamReader.Peek() != -1)
          {
             textBox1.Text = _textStreamReader.ReadLine();
          }
       }
       catch
       {
          MessageBox.Show("Error writing text!");
       }					
    Copier après la connexion

    Ce code détermine si le caractère à lire est toujours présent dans le flux. Si le caractère est trouvé, la zone de texte lira la ligne.

  9. Appuyez sur F5 pour exécuter l'application.

Code complet

   using System;
   using System.Drawing;
   using System.Collections;
   using System.ComponentModel;
   using System.Windows.Forms;
   using System.Data;

   using System.IO;
   using System.Reflection;

   namespace MyNamespace
   {
      /// <summary>
      /// Summary description for Form1.
      /// </summary>
      public class Form1 : System.Windows.Forms.Form
      {
         private System.Windows.Forms.PictureBox pictureBox1;
         private System.Windows.Forms.TextBox textBox1;
         private System.Windows.Forms.Button button1;
         private System.Windows.Forms.Button button2;
         /// <summary>
         /// Required designer variable.
         /// </summary>
         private System.ComponentModel.Container components = null;

         public Form1()
         {
            // 
            // Required for Windows Form Designer support.
            // 
            InitializeComponent();

            // 
            // TODO: Add any constructor code after InitializeComponent call.
            // 
         }

         /// <summary>
         /// Clean up any resources being used.
         /// </summary>
         protected override void Dispose( bool disposing )
         {
            if( disposing )
            {
               if (components != null) 
               {
                  components.Dispose();
               }
            }
            base.Dispose( disposing );
         }

      #region Windows Form Designer generated code
         /// <summary>
         /// Required method for Designer support - do not modify
         /// the contents of this method with the code editor.
         /// </summary>
         private void InitializeComponent()
         {
            this.pictureBox1 = new System.Windows.Forms.PictureBox();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.button1 = new System.Windows.Forms.Button();
            this.button2 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // pictureBox1
            // 
            this.pictureBox1.Location = new System.Drawing.Point(4, 8);
            this.pictureBox1.Name = "pictureBox1";
            this.pictureBox1.Size = new System.Drawing.Size(284, 192);
            this.pictureBox1.TabIndex = 0;
            this.pictureBox1.TabStop = false;
            // 
            // textBox1
            // 
            this.textBox1.Location = new System.Drawing.Point(92, 236);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(192, 20);
            this.textBox1.TabIndex = 1;
            this.textBox1.Text = "textBox1";
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(8, 208);
            this.button1.Name = "button1";
            this.button1.TabIndex = 2;
            this.button1.Text = "Show Image";
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // button2
            // 
            this.button2.Location = new System.Drawing.Point(8, 236);
            this.button2.Name = "button2";
            this.button2.TabIndex = 3;
            this.button2.Text = "Get Text";
            this.button2.Click += new System.EventHandler(this.button2_Click);
            // 
            // Form1
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(292, 266);
            this.Controls.AddRange(new System.Windows.Forms.Control[]{
                                                                     this.button2,
                                                                     this.button1,
                                                                     this.textBox1,
                                                                     this.pictureBox1});

            this.Name = "Form1";
            this.Text = "Form1";
            this.Load += new System.EventHandler(this.Form1_Load);
            this.ResumeLayout(false);
         }
      #endregion

         Assembly _assembly;
         Stream _imageStream;
         StreamReader _textStreamReader;

         /// <summary>
         /// The main entry point for the application.
         /// </summary>
         [STAThread]
         static void Main() 
         {
            Application.Run(new Form1());
         }

         private void Form1_Load(object sender, System.EventArgs e)
         {
            try
            {
               _assembly = Assembly.GetExecutingAssembly();
               _imageStream = _assembly.GetManifestResourceStream("MyNamespace.MyImage.bmp");
              _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNamespace.MyTextFile.txt"));
            }
            catch
            {
               MessageBox.Show("Error accessing resources!");
            }		
         }

         private void button1_Click(object sender, System.EventArgs e)
         {
            try
            {
               pictureBox1.Image = new Bitmap(_imageStream);
            }
            catch 
            {
               MessageBox.Show("Error creating image!");
            }
         }

         private void button2_Click(object sender, System.EventArgs e)
         {
            try
            {
               if(_textStreamReader.Peek() != -1)
               {
                  textBox1.Text = _textStreamReader.ReadLine();
               }
            }
            catch
            {
               MessageBox.Show("Error writing text!");
            }		
         }
      }
   }				
Copier après la connexion

REMARQUESi vous êtes dans Visual Studio 2005 ou dans Visual Studio 2008, vous devez modifier le code. Lorsque vous créez un projet Windows Forms, Visual C# ajoute un formulaire au projet par défaut. Ce formulaire est nommé Form1. Les deux fichiers représentant le formulaire s'appellent Form1.cs et Form1.designer.cs. Écrivez votre code dans Form1.cs. Le fichier Designer.cs est le code écrit par le Concepteur Windows Forms qui implémente toutes les actions que vous effectuez en ajoutant des contrôles. Pour plus d'informations sur Windows Forms Designer dans Visual C# 2005 ou Visual Studio 2008, visitez Microsoft ci-dessous Site Web :

http://msdn2.microsoft.com/en-us/library/ms173077.aspx

Dépannage

En raison de Les noms des ressources sont sensibles à la casse. Veuillez vérifier que vous accédez à la ressource en utilisant l'orthographe et la casse appropriées. Vous pouvez utiliser ILDASM pour lire les données du manifeste afin de vérifier l'orthographe exacte d'une ressource.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!