Table des matières
Vue d'ensemble
Démonstration étape par étape
Ajouter des ressources intégrées
Accès aux ressources
Afficher les ressources
Code complet
Dépannage
Maison développement back-end Tutoriel C#.Net Explication détaillée de la façon d'intégrer et d'utiliser C# pour accéder au code de ressource

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

Mar 14, 2017 pm 01:54 PM

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Active Directory avec C# Active Directory avec C# Sep 03, 2024 pm 03:33 PM

Guide d'Active Directory avec C#. Nous discutons ici de l'introduction et du fonctionnement d'Active Directory en C# ainsi que de la syntaxe et de l'exemple.

Sérialisation C# Sérialisation C# Sep 03, 2024 pm 03:30 PM

Guide de sérialisation C#. Nous discutons ici de l'introduction, des étapes de l'objet de sérialisation C#, du fonctionnement et de l'exemple respectivement.

Générateur de nombres aléatoires en C# Générateur de nombres aléatoires en C# Sep 03, 2024 pm 03:34 PM

Guide du générateur de nombres aléatoires en C#. Nous discutons ici du fonctionnement du générateur de nombres aléatoires, du concept de nombres pseudo-aléatoires et sécurisés.

Vue Grille de données C# Vue Grille de données C# Sep 03, 2024 pm 03:32 PM

Guide de la vue Grille de données C#. Nous discutons ici des exemples de la façon dont une vue de grille de données peut être chargée et exportée à partir de la base de données SQL ou d'un fichier Excel.

Modèles en C# Modèles en C# Sep 03, 2024 pm 03:33 PM

Guide des modèles en C#. Nous discutons ici de l'introduction et des 3 principaux types de modèles en C# ainsi que de ses exemples et de l'implémentation du code.

Nombres premiers en C# Nombres premiers en C# Sep 03, 2024 pm 03:35 PM

Guide des nombres premiers en C#. Nous discutons ici de l'introduction et des exemples de nombres premiers en c# ainsi que de l'implémentation du code.

Factorielle en C# Factorielle en C# Sep 03, 2024 pm 03:34 PM

Guide de Factorial en C#. Nous discutons ici de l'introduction de factorial en c# ainsi que de différents exemples et de l'implémentation du code.

La différence entre le multithreading et le C # asynchrone La différence entre le multithreading et le C # asynchrone Apr 03, 2025 pm 02:57 PM

La différence entre le multithreading et l'asynchrone est que le multithreading exécute plusieurs threads en même temps, tandis que les opérations effectuent de manière asynchrone sans bloquer le thread actuel. Le multithreading est utilisé pour les tâches à forte intensité de calcul, tandis que de manière asynchrone est utilisée pour l'interaction utilisateur. L'avantage du multi-threading est d'améliorer les performances informatiques, tandis que l'avantage des asynchrones est de ne pas bloquer les threads d'interface utilisateur. Le choix du multithreading ou asynchrone dépend de la nature de la tâche: les tâches à forte intensité de calcul utilisent le multithreading, les tâches qui interagissent avec les ressources externes et doivent maintenir la réactivité de l'interface utilisateur à utiliser asynchrone.

See all articles