Cara untuk menanamkan dan mengakses sumber dengan menggunakan Visual C#

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 319292 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Artikel ini selangkah demi selangkah menjelaskan cara menggunakan Visual C# untuk menanamkan sumber daya sebagai bagian dari Majelis, dan mengakses sumber daya saat menjalankan.

Sekilas pandang

The.NET Framework dapat merangkum file sebagai bagian dari perakitan dikompilasi. File-file ini dikenal sebagai sumber daya yang tertanam. Sumber daya benar-benar terpisah dari .resources dan .resx file yang berkaitan dengan Majelis. Anda dapat mengakses sumber daya saat menjalankan melalui Majelis kelas System.Reflection namespace.

Keuntungan utama embedding sumber daya untuk yang nyata adalah bahwa karena file adalah bagian dari Anda perakitan dikompilasi, pengguna tidak dapat secara tidak sengaja menghapus atau misplace file yang sangat penting untuk aplikasi Anda, yang dalam beberapa kasus dapat mencegah eksekusi program Anda. Salah satu batasan dari pendekatan ini adalah bahwa Anda tidak dapat menyimpan perubahan ke file ini kepada Majelis tanpa mengkompilasi program. Karena ini, hanya mencakup berkas yang tidak akan berubah selama hidup aplikasi Anda sebagai sumber daya yang tertanam.

Langkah demi langkah demonstrasi

Untuk menambahkan tertanam sumber daya untuk proyek Anda, Anda harus menambahkan file sebagai bagian dari proyek Anda. Setelah Anda menambahkan file untuk proyek Anda, Anda dapat mengakses dan menampilkan sumber daya melalui System.Reflection namespace.

Menambahkan sumber tertanam

Untuk menambahkan file teks dan file gambar untuk proyek Anda sebagai sumber daya yang tertanam, ikuti langkah berikut:
  1. Membuat proyek Windows aplikasi baru untuk demonstrasi ini. Formulir ini digunakan untuk menampilkan sumber daya yang diakses dari Majelis pelaksana selama jangka waktu.
  2. Klik kanan nama proyek Anda, klik Tambahkan, lalu klik Menambah Item baru.
  3. Dalam Item baru kotak dialog, pilih File teks dari menu, dan nama file MyTextFile.txt. Ketika berkas terbuka di lingkungan pengembangan terpadu (IDE), menambahkan beberapa teks, dan kemudian tutup berkas.
  4. Ulangi langkah 1 dan 2 untuk menambahkan gambar bitmap untuk proyek Anda, tapi bukannya memilih File teks sebagai jenis item yang baru, pilih Bitmap File, dan kemudian mengubah nama file ke MyImage.bmp. Ketika gambar baru dibuka di IDE, menarik sesuatu pada gambar, dan kemudian tutup berkas.
  5. Klik kanan file teks atau bitmap dan pilih Properti.
  6. Dalam Properti kotak dialog, Cari Membangun tindakan properti. Secara default, properti ini diatur ke Konten. Klik properti dan mengubah Membangun tindakan properti untuk Tertanam Resource.
  7. Ulangi langkah 4 dan 5 untuk berkas lain.
Waktu berikutnya Anda membangun proyek, Kompilator menambahkan file ini untuk perakitan Anda. Kompilator menambah akar namespace proyek nama sumber daya ketika hal ini termasuk dalam proyek. Sebagai contoh, jika akar namespace proyek Anda adalah MyNamespace, sumber daya yang bernama MyNamespace.MyTextFile.txt dan MyNamespace.MyImage.bmp.

CATATAN: Nama file sumber daya huruf yang benar. Ketika Anda mengakses sumber daya, Anda harus menggunakan ejaan yang tepat dan kasus nama file. Jika Anda tidak menggunakan ejaan yang tepat dan kasus nama file, metode panggilan untuk akses ManifestResourceStream kembali Tidak ada, dan sistem tidak meningkatkan pengecualian.

CATATAN: Jika Anda ingin memastikan nama sumber daya, Anda dapat menggunakan Microsoft Intermediate Language Disassembler (ILDASM) untuk melihat data yang nyata, yang daftar sumber daya yang disertakan.

Mengakses sumber

Untuk mengakses sumber daya yang Anda telah tertanam dalam mewujudkan Anda Majelis, impor System.io dan System.Reflection namespaces, sebagai berikut:
   using System.IO;
   using System.Reflection;
				
The System.io namespace menyediakan definisi streaming dan System.Reflection namespace mendefinisikan Majelis kelas yang menyediakan metode untuk mengakses sumber daya yang tertanam dalam sidang Anda.

Ketika Anda menyatakan berikut dalam wilayah umum Deklarasi, sumber daya dari Majelis membaca ketika bentuk di-load:
   Assembly _assembly;
   Stream _imageStream;
   StreamReader _textStreamReader;
				
CATATAN: Untuk akses Beban acara untuk bentuk dalam kode Editor, klik dua kali bentuk dalam desain Editor.

Untuk membaca sumber dari Majelis yang mengeksekusi kode saat ini, Anda harus mendapatkan contoh Majelis itu. Untuk melakukannya, gunakan GetExecutingAssembly metode Majelis, sebagai berikut:
   _assembly = Assembly.GetExecutingAssembly();
				
Membaca informasi dari sumber ke aliran dilakukan dengan panggilan metode untuk GetManifestResourceStream. Parameter yang dilewatkan ke metode ini adalah sumber daya yang dapat diakses. Dua sumber daya kemudian membaca untuk arus mereka sesuai sebagai Beban acara bentuk dijalankan.
   _imageStream = _assembly.GetManifestResourceStream("MyNameSpace.MyImage.bmp");
   _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNameSpace.MyTextFile.txt"));
				
Kode Beban acara untuk bentuk yang menyerupai berikut ini:
   try
   {
      _assembly = Assembly.GetExecutingAssembly();
      _imageStream = _assembly.GetManifestResourceStream("MyNamespace.MyImage.bmp");
      _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNamespace.MyTextFile.txt"));
   }
   catch
   {
      MessageBox.Show("Error accessing resources!");
   }
				
The Mencoba menangkap pernyataan, dikenal sebagai penanganan kesalahan terstruktur dalam.NET, digunakan untuk menangkap setiap kesalahan yang mungkin terjadi saat contoh dari Majelis kelas mengakses sumber daya.

Tampilan sumber daya

Contoh ini menggunakan dua tombol untuk menampilkan sumber daya yang tertanam. Ketika Anda mengklik tombol pertama, gambar bitmap yang didasarkan pada sumber daya yang membaca dari Majelis dibuat dan ditampilkan dalam PictureBox kontrol dalam bentuk. Tombol kedua membaca dari sumber teks dan menampilkan teks dalam kotak teks.

Untuk menampilkan sumber daya yang tertanam, ikuti langkah berikut:
  1. Tambahkan PictureBox mengendalikan ke bentuk.
  2. Menambahkan baru Tombol kontrol ke formulir, dan kemudian mengubah yang Teks properti untuk Tampilkan gambar.
  3. Double-klik tombol untuk membuka yang Klik acara di kode penampil, dan kemudian paste kode berikut dalam acara ini:
       try
       {
          pictureBox1.Image = new Bitmap(_imageStream);			       }
       catch 
       {
          MessageBox.Show("Error creating image!");
       }
    					
    Kode ini menghasilkan contoh baru dari suatu bitmap yang didasarkan pada sungai sumber daya yang dibacakan di Beban acara formulir.

  4. Tambahkan TextBox mengendalikan ke bentuk.
  5. Menambahkan Tombol kontrol ke formulir, dan kemudian mengubah yang Teks properti untuk Mendapatkan teks.
  6. Double-klik tombol di Editor desain untuk membuka Click_Event untuk tombol, dan kemudian paste kode berikut dalam acara:
       try
       {
          if(_textStreamReader.Peek() != -1)
          {
             textBox1.Text = _textStreamReader.ReadLine();
          }
       }
       catch
       {
          MessageBox.Show("Error writing text!");
       }
    					
    Kode ini menentukan apakah karakter untuk dibaca masih ada di sungai. Jika karakter yang ditemukan, garis dibaca ke kotak teks.

  7. Tekan F5 untuk menjalankan aplikasi.

Kode lengkap

   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!");
            }		
         }
      }
   }
				
Catatan Kode harus berubah dalam Visual Studio 2005 atau Visual Studio 2008. Bila Anda membuat proyek Windows Forms, Visual C# menambahkan salah satu bentuk proyek secara default. Formulir ini dinamakan Form1. Dua file yang mewakili bentuk yang bernama Form1.cs dan Form1.designer.cs. Anda menulis kode dalam Form1.cs. Designer.cs file adalah di mana Windows Forms Designer menulis kode sumber yang mengimplementasikan semua tindakan Anda dilakukan dengan menambahkan kontrol. Untuk informasi lebih lanjut tentang Windows Forms Designer Visual C# 2005 atau dalam Visual Studio 2008, kunjungi Web site Microsoft berikut:
http://msdn2.Microsoft.com/en-us/library/ms173077.aspx

Pemecahan Masalah

Karena sumber daya nama case-sensitive, pastikan bahwa Anda menggunakan ejaan yang benar dan kasus sumber daya yang diakses. Anda dapat menggunakan ILDASM untuk membaca data nyata untuk memverifikasi ejaan yang tepat sumber daya.

REFERENSI

Untuk informasi lebih lanjut, lihat situs Web Microsoft Developer Network (MSDN) berikut:
System.Reflection Namespace
.aspx http://msdn2.Microsoft.com/en-us/library/System.Reflection (vs.71)

Majelis kelas
.aspx http://msdn2.Microsoft.com/en-us/library/System.Reflection.Assembly (vs.71)

Assembly.GetManifestResourceStream metode
.aspx http://msdn2.Microsoft.com/en-us/library/System.Reflection.Assembly.getmanifestresourcestream (vs.71)

Properti

ID Artikel: 319292 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# 2008 Express Edition
Kata kunci: 
kbsweptvs2008 kbhowtomaster kbmt KB319292 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:319292

Berikan Masukan

 

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