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:
- Membuat proyek Windows aplikasi baru untuk demonstrasi ini. Formulir ini digunakan untuk menampilkan sumber daya yang diakses dari Majelis pelaksana selama jangka waktu.
- Klik kanan nama proyek Anda, klik Tambahkan, lalu klik Menambah Item baru.
- 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.
- 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.
- Klik kanan file teks atau bitmap dan pilih Properti.
- 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.
- 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:
- Tambahkan PictureBox mengendalikan ke bentuk.
- Menambahkan baru Tombol kontrol ke formulir, dan kemudian mengubah yang Teks properti untuk Tampilkan gambar.
- 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.
- Tambahkan TextBox mengendalikan ke bentuk.
- Menambahkan Tombol kontrol ke formulir, dan kemudian mengubah yang Teks properti untuk Mendapatkan teks.
- 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.
- 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:
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.
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
| kbsweptvs2008 kbhowtomaster kbmt KB319292 KbMtid |
Penerjemahan MesinPENTING: 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
(http://support.microsoft.com/kb/319292/en-us/
)