Katıştırmak ve Visual C# kullanarak kaynaklara erişim hakkında

Makale çevirileri Makale çevirileri
Makale numarası: 319292 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu adım adım makalede, Visual C# kaynakları derlemenin bir parçası olarak katıştırın ve sonra da zamanında kaynaklara erişmek için nasıl kullanılacağını açıklar.

GENEL BAKIŞ

.NET Framework dosyaları derlenmiş bir derlemesinin bir parçası olarak kapsülleyen. Bu dosyalar, katıştırılmış kaynak olarak bilinir. Bu kaynaklar derlemesi ile ilişkili .resources ve .resx dosyalar tümüyle ayrıdır. Bu kaynaklar, çalışma zamanında System.Reflection ad alanının derleme sınıfı aracılığıyla erişebilirsiniz.

Liste kaynaklara katıştırma BIR önemli dosyaları, derlenmiş derlemesinin bir parçası olduğundan, kullanıcı silemez yanlışlıkla veya bazı durumlarda, programınızın çalışmasını engelleyebilecek, uygulama için kritik olan dosyalar misplace, üstünlüktür. Bir bu yaklaşım, değişiklikleri bu dosyaya derlemesine bir program recompiling olmadan kaydedilemiyor, kısıtlamasıdır. Bu nedenle, yalnızca, uygulamanın katıştırılmış olan bir kaynak olarak yaşam süresi sırasında değişmez dosyaları içerir.

Adım adım tanıtım

Katıştırılmış kaynak Projenize eklemek için <a0></a0>, önce dosyaları projenizde bir parçası olarak eklemelisiniz. Projenize dosyaları ekledikten sonra erişim ve System.Reflection ad alanı aracılığıyla kaynakları görüntüler.

Embedded kaynakları Ekle

Bir metin dosyasına ve bir resim dosyası, katıştırılmış kaynak olarak Projenize eklemek için <a0></a0>, aşağıdaki adımları izleyin:
  1. Bu gösteri yeni bir Windows uygulaması projesi oluşturun. Bu formu, çalışma sırasında yürütülen derlemesinden erişilmiş olan kaynakları görüntülemek için kullanılır.
  2. Proje adınızı sağ tıklatın, Ekle ' yi tıklatın ve sonra Yeni Öğe Ekle'yi tıklatın.
  3. Yeni öğe iletişim kutusunda, Metin dosyası menüden seçin ve MyTextFile.txt dosya adı. Dosyayı tümleşik geliştirme ortamı (IDE) açtığında, metin ekleme ve dosyayı kapatın.
  4. Projenizi, ancak Metin dosyası yeni madde tipini seçmek yerine, bir bit eşlem resmi eklemek için 1 ve 2 numaralı adımları yineleyin, Biteşlem dosyası seçin ve sonra da MyImage.bmp için dosya adını değiştirin. Yeni resim ıDE'DE açıldığında, bir şey görüntüyü çizme ve dosyayı kapatın.
  5. Metin dosyası veya bit eşlem sağ tıklatın ve sonra Özellikler ' i seçin.
  6. Özellikler iletişim kutusunda, Eylem oluştur özelliği bulun. Bu özellik varsayılan olarak, içerik için ayarlanır. Tıklatın ve Eylem oluştur özelliği için Katıştırılmış kaynak değiştirme.
  7. Adım 4 ve 5, diğer dosya için yineleyin.
Projenin bir sonraki kez derleyici, bu dosyalar sizin derlemesine ekler. Derleyici projede bulunan kök ad projenin kaynak adına ekler. Örneğin, projenizin kök ad MyNamespace, kaynakları MyNamespace.MyTextFile.txt ve MyNamespace.MyImage.bmp olarak adlandırılır.

Not: kaynak dosya adlarının büyük/küçük harfe duyarlıdır. Kaynaklara eriştiğinizde, aynı yazımı ve büyük/küçük harf dosya adı kullanmanız gerekir. Aynı yazımı kullanın ve yöntem çağrısı ManifestResourceStream erişmek için bir dosya adı, servis talebi Nothing ve sistem geri dönerse bir özel durum yükseltmenizi değil.

Not: kaynak adlarını doğrulamak isterseniz, dahil olan kaynakları listeler bildirim verileri görüntülemek için Microsoft ara dil Disassembler (ILDASM) kullanabilirsiniz.

Erişim kaynakları

Kendi derlemesinin bildirimde katıştırılmış kaynaklara erişmek için <a0></a0>, System.ıo ve System.Reflection ad alanları aşağıdaki gibi alma:
   using System.IO;
   using System.Reflection;
				
System.ıo ad bir tanımını sağlar ve System.Reflection ad, derlemede katıştırılmış kaynaklara erişmek için yöntemler sağlar derleme sınıfı tanımlar.

Genel bildirim alanında aşağıdaki bildirdiğinizde, derleme kaynaklardan formu ne zaman yüklenir okunan:
   Assembly _assembly;
   Stream _imageStream;
   StreamReader _textStreamReader;
				
Not: Load olayı form içinde kod düzenleyicisine erişmek için <a0></a0>, form Tasarım Düzenleyicisi'ni çift tıklatın.

Kaynağın geçerli kod yürütme derlemesinden okumak için <a0></a0>, bu derleme örneği edinmelisiniz. Bunu yapmak için <a0></a0>, GetExecutingAssembly derlemesi, yöntemi aşağıdaki gibi kullanın:
   _assembly = Assembly.GetExecutingAssembly();
				
bilgileri, bir akışa kaynaktan okuma GetManifestResourceStream yöntemi çağrısı ile gerçekleştirilir. Bu yönteme geçilen parametre erişilmesi gereken kaynak adıdır. Formun Load olayı yürütülen gibi iki kaynak sonra karşılık gelen akış için okunur.
   _imageStream = _assembly.GetManifestResourceStream("MyNameSpace.MyImage.bmp");
   _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNameSpace.MyTextFile.txt"));
				
Kod formun Load olayı, aşağıdakine benzer:
   try
   {
      _assembly = Assembly.GetExecutingAssembly();
      _imageStream = _assembly.GetManifestResourceStream("MyNamespace.MyImage.bmp");
      _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNamespace.MyTextFile.txt"));
   }
   catch
   {
      MessageBox.Show("Error accessing resources!");
   }
				
. NET'te, yapılandırılmış hata işleme olarak da bilinen Try-Catch deyimi, Assembly sınıfın örneğini kaynaklara eriştiği sırada oluşmuş olabilir hataları yakalamak için kullanılır.

Görüntü kaynakları

Bu örnekte, iki düğme katıştırılmış olan kaynakları görüntülemek için kullanılır. Ilk düğmeyi tıklattığınızda, derleme okunan kaynak temel alan bir bit eşlem resmi oluşturulur ve form PictureBox denetimde görüntülenen. Ikinci düğmeyi, metnin bir kaynaktan okur ve metin kutusuna metni görüntüler.

Katıştırılmış kaynakları görüntülemek için <a0></a0>, aşağıdaki adımları izleyin:
  1. PictureBox denetimi forma ekleyin.
  2. Forma yeni bir Düğme denetimi ekler ve sonra da Resmi Göster'Textözelliğini değiştirin.
  3. Düğmeyi tıklatarak olayını kod görüntüleyicide açmak için çift tıklatın ve sonra da bu olayda aşağıdaki kodu yapıştırın:
       try
       {
          pictureBox1.Image = new Bitmap(_imageStream);			       }
       catch 
       {
          MessageBox.Show("Error creating image!");
       }
    					
    bu kod, bir bit eşlem, formun Load olayı okundu kaynak akışı temel alan yeni bir örneğini oluşturur.

  4. Bir TextBox denetimi forma ekleyin.
  5. Başka bir Düğme denetimi forma ekleyin ve sonra da Metin AlText özelliğini değiştirin.
  6. Tasarım düğmesinin Click_Event açmaya Düzenleyicisi'nde alan düğmesini çift tıklatın ve sonra da olay aşağıdaki kodu yapıştırın:
       try
       {
          if(_textStreamReader.Peek() != -1)
          {
             textBox1.Text = _textStreamReader.ReadLine();
          }
       }
       catch
       {
          MessageBox.Show("Error writing text!");
       }
    					
    bu kod, okunması gereken karakterler akışında hala var olup olmadığını belirler. Karakter bulunamazsa, bir satır için <a1>metin</a1> kutusunu okunur.

  7. Uygulamayı çalıştırmak için F5 tuşuna basın.

Tam kod

   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!");
            }		
         }
      }
   }
				
Not Kod, Visual Studio 2005 veya Visual Studio 2008 için değiştirilmelidir. Windows Forms bir proje oluşturduğunuzda, Visual C# bir form projeye varsayılan olarak ekler. Bu formu Form1 ' dir. Form temsil eden iki dosya Form1.cs ve Form1.designer.cs olarak adlandırılır. Kodunuzu, Form1.cs içinde yazın. Burada Windows Form Designer denetimleri ekleyerek gerçekleştirilen tüm eylemleri gerçekleştiren kod yazma Designer.cs dosyasıdır. Visual C# 2005 veya Visual Studio 2008 Windows Forms Tasarımcısı hakkında daha fazla bilgi için aşağıdaki Microsoft Web sitesini ziyaret edin:
http://msdn2.microsoft.com/en-us/library/ms173077.aspx

SORUN GİDERME

Kaynak adlarının büyük/küçük harfe duyarlı olduğundan, doğru yazım ve erişilen kaynaklarının büyük/küçük harf kullandığınızı doğrulayın. ILDASM, kaynakların tam yazım doğrulamak için bir bildirim verilerini okumak için kullanabilirsiniz.

Referanslar

Daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitelerine bakın:
System.Reflection ad alanı
http://msdn2.microsoft.com/en-us/library/system.reflection(vs.71).aspx

Derleme sınıfı
http://msdn2.microsoft.com/en-us/library/system.reflection.assembly(vs.71).aspx

Assembly.GetManifestResourceStream yöntemi
http://msdn2.microsoft.com/en-us/library/system.reflection.assembly.getmanifestresourcestream(vs.71).aspx

Özellikler

Makale numarası: 319292 - Last Review: 15 Temmuz 2008 Salı - Gözden geçirme: 3.1
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# 2008 Express Edition
Anahtar Kelimeler: 
kbmt kbsweptvs2008 kbhowtomaster KB319292 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:319292

Geri Bildirim Ver

 

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