Làm th? nào đ? nhúng và tài nguyên truy c?p b?ng cách s? d?ng Visual C#

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 319292 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang này

TÓM T?T

Bài vi?t t?ng bư?c này mô t? cách s? d?ng Visual C# đ? nhúng tài nguyên như là m?t ph?n c?a h?i đ?ng, và sau đó truy c?p vào các ngu?n l?c và th?i gian ch?y.

T?ng quan

Các.NET Framework có th? gói g?n t?p tin là m?t ph?n c?a m?t h?i đ?ng giúp đ? biên d?ch. Nh?ng t?p tin này đư?c g?i là tài nguyên nhúng. Các ngu?n tài nguyên hoàn toàn tách bi?t v?i các t?p tin .resources và .resx đư?c liên k?t v?i h?i đ?ng. B?n có th? truy c?p các ngu?n tài nguyên t?i th?i gian ch?y qua các L?p ráp l?p h?c c?a các System.Reflection không gian tên.

M?t l?i th? l?n c?a nhúng ngu?n l?c đ? Manifest là b?i v? các t?p tin là m?t ph?n c?a b?n l?p ráp biên so?n, ngư?i dùng không th? vô t?nh xóa ho?c misplace t?p tin r?t quan tr?ng đ? ?ng d?ng c?a b?n, mà trong m?t s? trư?ng h?p có th? ngăn ch?n vi?c thi hành chương tr?nh c?a b?n. M?t trong nh?ng h?n ch? c?a phương pháp này là b?n không th? lưu b?t k? thay đ?i vào t?p tin này đ? h?i đ?ng mà không có vi?c chương tr?nh. V? ch? bao g?m các t?p tin s? không thay đ?i trong su?t cu?c đ?i c?a các ?ng d?ng c?a b?n như là m?t ngu?n nhúng.

Cu?c bi?u t?nh-by-step

Đ? thêm tài nguyên nhúng vào d? án c?a b?n, trư?c tiên b?n ph?i thêm các t?p tin như là m?t ph?n c?a d? án c?a b?n. Sau khi b?n đ? thêm các t?p tin vào d? án c?a b?n, b?n có th? truy c?p và hi?n th? các ngu?n l?c thông qua các System.Reflection không gian tên.

Thêm ngu?n l?c nhúng

Đ? thêm m?t t?p tin văn b?n và t?p h?nh ?nh cho d? án c?a b?n như là ngu?n l?c nhúng, h?y làm theo các bư?c sau:
  1. T?o m?t d? án ?ng d?ng m?i cho cu?c bi?u t?nh này. M?u này đư?c dùng đ? hi?n th? các ngu?n l?c đư?c truy c?p t? h?i đ?ng executing trong th?i gian ch?y.
  2. Nh?p chu?t ph?i vào tên d? án c?a b?n, h?y nh?p vào Thêm, sau đó b?m Thêm m?c m?i.
  3. Trong các Kho?n m?c m?i h?p tho?i, ch?n T?p văn b?n t? tr?nh đơn, và tên t?p MyTextFile.txt. Khi t?p tin m? ra trong môi trư?ng phát tri?n tích h?p (IDE), thêm m?t s? văn b?n, và sau đó đóng t?p.
  4. L?p l?i bư?c 1 và 2 thêm m?t ?nh bitmap đ? d? án c?a b?n, nhưng thay v? ch?n T?p văn b?n như lo?i kho?n m?c m?i, ch?n T?p bitmap, và sau đó thay đ?i tên t?p tin đ? MyImage.bmp. Khi h?nh ?nh m?i đư?c m? ra trong IDE, v? m?t cái g? đó trên h?nh ?nh, và sau đó đóng t?p.
  5. Nh?p chu?t ph?i vào t?p văn b?n ho?c bitmap, và ch?n Thu?c tính.
  6. Trong các Thu?c tính h?p tho?i h?p, xác đ?nh v? trí các Xây d?ng hành đ?ng b?t đ?ng s?n. Theo m?c đ?nh, tài s?n này đư?c thi?t l?p đ? N?i dung. Nh?p vào các tài s?n và thay đ?i các Xây d?ng hành đ?ng b?t đ?ng s?n đ? Nhúng tài nguyên.
  7. L?p l?i bư?c 4 và 5 cho các t?p tin khác.
Sau khi b?n xây d?ng d? án, tr?nh biên d?ch cho bi?t thêm nh?ng t?p tin này đ? h?i đ?ng c?a b?n. Tr?nh biên d?ch cho bi?t thêm không gian tên g?c c?a d? án v?i tên c?a các ngu?n tài nguyên khi nó đư?c bao g?m trong d? án. Ví d?, n?u không gian tên g?c c?a d? án c?a b?n MyNamespace, các ngu?n l?c đư?c đ?t tên MyNamespace.MyTextFile.txt và MyNamespace.MyImage.bmp.

LƯU ?: Các tài nguyên t?p tin tên là ch?. Khi b?n truy c?p các ngu?n l?c, b?n ph?i s? d?ng chính t? chính xác và trư?ng h?p c?a tên t?p. N?u b?n không s? d?ng chính t? chính xác và trư?ng h?p c?a tên t?p tin, các phương pháp g?i đ? truy c?p các ManifestResourceStream tr? v? Không có g?, và h? th?ng không tăng m?t ngo?i l?.

LƯU ?: N?u b?n mu?n xác minh tên tài nguyên, b?n có th? s? d?ng Disassembler ngôn ng? trung gian Microsoft (ILDASM) đ? xem các d? li?u bi?u hi?n, trong đó li?t kê các ngu?n tài nguyên bao g?m.

Truy nh?p tài nguyên

Đ? truy c?p vào các ngu?n l?c mà b?n đ? nhúng trong th? v?n h?i c?a b?n, nh?p kh?u các System.io và các System.Reflection không gian tên, như sau:
   using System.IO;
   using System.Reflection;
				
Các System.io không gian tên cung c?p đ?nh ngh?a c?a m?t d?ng và các System.Reflection không gian tên xác đ?nh các L?p ráp l?p cung c?p phương pháp đ? truy c?p vào các ngu?n l?c đư?c nhúng trong h?i đ?ng c?a b?n.

Khi b?n tuyên b? sau đây trong khu v?c tuyên b? chung, các ngu?n l?c t? h?i đ?ng đư?c đ?c khi bi?u m?u đư?c n?p:
   Assembly _assembly;
   Stream _imageStream;
   StreamReader _textStreamReader;
				
LƯU ?: Đ? truy c?p các T?i s? ki?n cho các h?nh th?c trong tr?nh biên t?p m?, nh?p đúp vào h?nh th?c trong tr?nh biên t?p thi?t k?.

Đ? đ?c các tài nguyên t? h?i đ?ng đó th?c hi?n m? hi?n th?i, b?n ph?i có đư?c m?t th? hi?n c?a h?i đ?ng đó. Đ? th?c hi?n vi?c này, s? d?ng các GetExecutingAssembly phương pháp c?a h?i đ?ng, như sau:
   _assembly = Assembly.GetExecutingAssembly();
				
Đ?c các thông tin t? các ngu?n l?c đ?n m?t d?ng đư?c th?c hi?n v?i m?t phương pháp g?i đ?n GetManifestResourceStream. Các tham s? đư?c thông qua v?i phương pháp này là tên c?a các ngu?n tài nguyên đó là đ? đư?c truy c?p. Hai ngu?n tài nguyên sau đó đ?c cho các d?ng tương ?ng như các T?i s? ki?n c?a các h?nh th?c đư?c thi hành.
   _imageStream = _assembly.GetManifestResourceStream("MyNameSpace.MyImage.bmp");
   _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNameSpace.MyTextFile.txt"));
				
M? s? trong các T?i s? ki?n cho các h?nh th?c tương t? như dư?i đây:
   try
   {
      _assembly = Assembly.GetExecutingAssembly();
      _imageStream = _assembly.GetManifestResourceStream("MyNamespace.MyImage.bmp");
      _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNamespace.MyTextFile.txt"));
   }
   catch
   {
      MessageBox.Show("Error accessing resources!");
   }
				
Các C? g?ng n?m b?t tuyên b?, đư?c g?i là qu?n l? c?u trúc l?i trong.NET, đư?c s? d?ng đ? n?m b?t b?t k? l?i nào có th? x?y ra trong khi th? hi?n c?a các L?p ráp l?p h?c ch? y?u truy c?p các ngu?n tài nguyên.

Hi?n th? tài nguyên

Ví d? này s? d?ng hai nút đ? hi?n th? các ngu?n l?c nhúng. Khi b?n b?m nút đ?u tiên, m?t ?nh bitmap mà d?a trên các ngu?n tài nguyên đ?c t? h?i đ?ng đư?c t?o ra và hi?n th? trong các PictureBox ki?m soát c?a các h?nh th?c. Nút th? hai l?n đ?c t? m?t ngu?n tài nguyên văn b?n và hi?n th? văn b?n trong h?p văn b?n.

Đ? hi?n th? các ngu?n l?c nhúng, h?y làm theo các bư?c sau:
  1. Thêm m?t PictureBox ki?m soát m?u.
  2. Thêm m?t m?i Nút ki?m soát m?u, và sau đó thay đ?i c?a nó Văn b?n b?t đ?ng s?n đ? Hi?n th? h?nh ?nh.
  3. B?m đúp nút đ? m? c?a nó Nh?p vào s? ki?n ngư?i xem m?, và sau đó dán đo?n m? sau vào s? ki?n này:
       try
       {
          pictureBox1.Image = new Bitmap(_imageStream);			       }
       catch 
       {
          MessageBox.Show("Error creating image!");
       }
    					
    M? này t?o ra m?t trư?ng h?p m?i c?a m?t ?nh bitmap mà d?a trên các d?ng tài nguyên đ? đư?c đ?c trong các T?i s? ki?n c?a các h?nh th?c.

  4. Thêm m?t TextBox ki?m soát m?u.
  5. Thêm khác Nút ki?m soát m?u, và sau đó thay đ?i c?a nó Văn b?n b?t đ?ng s?n đ? Nh?n đư?c văn b?n.
  6. B?m đúp chu?t vào nút trong tr?nh biên t?p thi?t k? đ? m? các Click_Event Đ?i v?i các nút, và sau đó dán sau đây m? trong s? ki?n này:
       try
       {
          if(_textStreamReader.Peek() != -1)
          {
             textBox1.Text = _textStreamReader.ReadLine();
          }
       }
       catch
       {
          MessageBox.Show("Error writing text!");
       }
    					
    M? này s? xác đ?nh li?u k? t? đư?c đ?c v?n c?n t?n t?i trong d?ng. N?u nhân v?t đư?c t?m th?y, m?t d?ng đư?c đ?c vào h?p văn b?n.

  7. Nh?n F5 đ? ch?y các ?ng d?ng.

Đ?y đ? m?

   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!");
            }		
         }
      }
   }
				
Chú ý M? nên đư?c thay đ?i trong Visual Studio 2005 ho?c trong Visual Studio 2008. Khi b?n t?o m?t d? án Windows Forms, Visual C# thêm m?t h?nh th?c cho các d? án theo m?c đ?nh. M?u đơn này đư?c đ?t tên Form1. Hai t?p tin mà đ?i di?n cho các h?nh th?c đư?c đ?t tên là Form1.cs và Form1.designer.cs. B?n vi?t m? c?a b?n trong Form1.cs. Các t?p tin Designer.cs là nơi các nhà thi?t k? các h?nh th?c Windows vi?t m? th?c hi?n t?t c? các hành đ?ng mà b?n th?c hi?n b?ng cách thêm đi?u khi?n. Đ? bi?t thêm chi ti?t v? Windows Forms Designer Visual C# 2005 ho?c trong Visual Studio 2008, ghé thăm Web site sau c?a Microsoft:
http://msdn2.Microsoft.com/en-US/Library/ms173077.aspx

Khắc phục sự cố

B?i v? ngu?n tài nguyên tên ch?, ki?m ch?ng r?ng b?n đang s? d?ng đúng chính t? và trư?ng h?p c?a các ngu?n l?c đư?c truy c?p. B?n có th? s? d?ng ILDASM đ? đ?c d? li?u hi?n nhiên đ? xác minh chính t? chính xác c?a các ngu?n tài nguyên.

THAM KH?O

Đ? bi?t thêm chi ti?t, xem trang Web Microsoft Developer Network (MSDN) sau đây:
Không gian tên System.Reflection
http://msdn2.Microsoft.com/en-US/Library/System.Reflection (vs.71) .aspx

H?i Class
http://msdn2.Microsoft.com/en-US/Library/System.Reflection.Assembly (vs.71) .aspx

Phương pháp Assembly.GetManifestResourceStream
http://msdn2.Microsoft.com/en-US/Library/System.Reflection.Assembly.getmanifestresourcestream (vs.71) .aspx

Thu?c tính

ID c?a bài: 319292 - L?n xem xét sau cùng: 27 Tháng Tám 2011 - Xem xét l?i: 2.0
Áp d?ng
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# 2008 Express Edition
T? khóa: 
kbsweptvs2008 kbhowtomaster kbmt KB319292 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:319292

Cung cấp Phản hồi

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com