現在オフラインです。再接続するためにインターネットの接続を待っています

埋め込むし、Visual C# を使用してリソースにアクセスする方法

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:319292
この資料の Microsoft Visual Basic .NET バージョンを参照してください。 319291.

この資料で、次の Microsoft.NET Framework クラス ライブラリの名前空間を参照します。
  • System.Reflection
  • System.IO

このタスクで

概要
この手順資料では、 Visual C# を使用してアセンブリの一部としてリソースを埋め込み、実行時にリソースにアクセスする方法について説明します。

back to the top

概要

.NET Framework のファイルは、コンパイル済みアセンブリの一部としてカプセル化できます。これらのファイルは、埋め込みリソースとして呼ばれます。これらのリソースは、アセンブリに関連付けられている .resources および .resx ファイルは完全に別です。これらのリソースは、実行時にアセンブリクラスのSystem.Reflection名前空間にアクセスできます。

マニフェスト リソースを埋め込む、最大の利点は、ファイルをコンパイル済みアセンブリの一部であるため、ユーザーできません誤って削除または場合によっては、プログラムの実行ができない場合がありますアプリケーションに重要なファイルを紛失することです。この方法の 1 つの制限は、変更をこのファイルにアセンブリ プログラムを再コンパイルしなくても保存できないことです。このため、埋め込みリソースとしてアプリケーションの有効期間中に変更されないファイルにはのみが含まれます。

back to the top

ステップ バイ ステップ デモンストレーション

埋め込みリソースをプロジェクトに追加するには、まずプロジェクトの一環として、ファイルを追加する必要があります。ファイルをプロジェクトに追加した後にアクセスして、 System.Reflection名前空間を使用したリソースを表示することができます。

back to the top

埋め込みリソースを追加します。

テキスト ファイルとイメージ ファイルに埋め込みリソースとしてプロジェクトを追加するには、次の手順を実行します。
  1. このデモの新しい Windows アプリケーション プロジェクトを作成します。このフォームを使用して、実行時に実行中のアセンブリからアクセスされるリソースを表示します。
  2. プロジェクト名を右クリックし、 [追加] をクリックし、[新しい項目の追加] をクリックします。
  3. 新しい項目の追加] ダイアログ ボックスで、メニューから、テキスト ファイルを選択し、MyTextFile.txt のファイル名します。統合開発環境 (IDE) で、ファイルを開くと、テキストを追加し、ファイルを閉じます。
  4. 手順 1 と 2 は、新しい項目の種類としてテキスト ファイルを選択するのではなくビットマップ イメージをプロジェクトに追加するのには、ビットマップ ファイルを選択し、[ファイル名をMyImage.bmpに変更します。IDE では、新しいイメージを開くときに、何か、イメージを描画し、ファイルを閉じます。
  5. テキスト ファイル、またはビットマップを右クリックし、[プロパティ] をクリックします。
  6. プロパティ] ダイアログ ボックスで、[ビルド アクション] プロパティを見つけます。既定では、このプロパティをコンテンツに設定されます。プロパティをクリックし、[埋め込まれたリソースに、ビルド アクションプロパティを変更します。
  7. その他のファイルを手順 4 と 5 を繰り返します。
プロジェクトをビルドすると、コンパイラ アセンブリにこれらのファイルを追加します。そのプロジェクトに含まれている場合コンパイラ プロジェクトのルート名前空間をリソースの名前を追加します。プロジェクトのルート名前空間 MyNamespace の場合は、たとえば、リソース MyNamespace.MyTextFile.txt と MyNamespace.MyImage.bmp は、. します。

: リソース ファイル名は大文字小文字を区別です。リソースにアクセスすると、正確なスペル チェックと大文字と小文字のファイル名を使用する必要があります。正確なスペルを使用しないシステムと何も、大文字と小文字のファイル名をManifestResourceStreamにアクセスするには、メソッド呼び出しを返した場合、例外は発生しません。

: リソース名を確認する場合は、マニフェストのデータは、含まれているリソースの一覧を表示するには、Microsoft 中間言語逆アセンブラー (ILDASM) を使用できます。

back to the top

リソースへのアクセス

アセンブリのマニフェストに埋め込まれているリソースにアクセスするには、 System.IOおよびSystem.Reflection名前空間は次のとおりインポートします。
   using System.IO;   using System.Reflection;				
ストリームの定義の名前空間を提供し、 System.Reflection名前空間をアセンブリに埋め込まれたリソースにアクセスするメソッドがアセンブリのクラスを定義します。

一般宣言領域で、次を宣言すると、フォームが読み込まれるとき、アセンブリからリソースが読み込まれます。
   Assembly _assembly;   Stream _imageStream;   StreamReader _textStreamReader;				
: のLoadイベントのコード エディターでフォームを表示するには、デザイン エディターで、フォームをダブルクリックします。

現在コードを実行しているアセンブリからリソースを読み取るには、そのアセンブリのインスタンスを取得する必要があります。これを行うには、次のようにアセンブリのGetExecutingAssemblyメソッドを使用します。
   _assembly = Assembly.GetExecutingAssembly();				
ストリームに、リソースから情報を読み取るが場合のメソッド呼び出しが実行されます。このメソッドに渡されるパラメーターは、アクセスするリソースの名前です。フォームのLoadイベントが実行されるときに 2 つのリソースから、対応するストリームを読み取ります。
   _imageStream = _assembly.GetManifestResourceStream("MyNameSpace.MyImage.bmp");   _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNameSpace.MyTextFile.txt"));				
フォームのLoadイベントのコードに次のようになります。
   try   {      _assembly = Assembly.GetExecutingAssembly();      _imageStream = _assembly.GetManifestResourceStream("MyNamespace.MyImage.bmp");      _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNamespace.MyTextFile.txt"));   }   catch   {      MessageBox.Show("Error accessing resources!");   }				
アセンブリのクラスのインスタンスは、リソースにアクセス中に発生したエラーをキャッチするTry-catchステートメントを .net構造化例外処理と呼ばれるが使用されます。

back to the top

リソースの表示

この例では、2 つのボタンを使用して、埋め込みリソースを表示します。最初のボタンをクリックすると、アセンブリから読み込まれるリソースに基づいて、ビットマップ イメージが作成され、フォームのPictureBoxコントロールに表示されます。2 番目のボタン テキスト リソースからの読み取りし、テキスト ボックスにテキストを表示します。

埋め込みリソースを表示するには、次の手順を実行します。
  1. PictureBoxコントロールをフォームに追加します。
  2. 新しいButtonコントロールをフォームに追加し、そのTextプロパティに表示するイメージを変更します。
  3. コードのビューアーでは、 Clickイベントを開くには、ボタンをダブルクリックして、このイベントには、次のコードを貼り付けます。
       try   {      pictureBox1.Image = new Bitmap(_imageStream);			       }   catch    {      MessageBox.Show("Error creating image!");   }					
    このコードは、フォームのLoadイベントで読み取られたリソース ストリームに基づいたビットマップの新しいインスタンスを生成します。

  4. テキスト ボックスコントロールをフォームに追加します。
  5. 別のButtonコントロールをフォームに追加し、テキストを取得するには、 Textプロパティを変更します。
  6. デザイン エディターはボタンのClick_Eventを開くには、ボタンをダブルクリックして、イベントに次のコードを貼り付けます。
       try   {      if(_textStreamReader.Peek() != -1)      {         textBox1.Text = _textStreamReader.ReadLine();      }   }   catch   {      MessageBox.Show("Error writing text!");   }					
    このコードは、読み取る文字はストリームに存在するかどうかを決定します。文字が見つかった場合は、行のテキスト ボックスに読み込まれます。

  7. アプリケーションを実行する F5 キーを押します。
back to the top

完全なコード

   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!");            }		         }      }   }				
メモVisual Studio 2005 または 2008 年の Visual Studio でコードを変更する必要があります。Windows フォーム プロジェクトを作成すると、Visual C# の 1 つのフォームがプロジェクトに既定で追加されます。このフォームに Form1 という名前です。フォームを表す 2 つのファイルは、Form1.designer.cs と呼びます。Form1.cs をコードを記述します。Designer.cs ファイルは、Windows フォーム デザイナーのすべてのアクションを実装するコードのコントロールを追加することによって実行することです。Visual C# 2005 または Visual Studio 2008年では、Windows フォーム デザイナーの詳細については、次のマイクロソフト Web サイトを参照してください。back to the top

トラブルシューティング

リソース名の大文字小文字を区別するためには、正しいスペル チェックし、アクセスするリソースの大文字と小文字を使用していることを確認します。ILDASM を使用して、リソースのスペルが正しいことを確認するには、マニフェスト データを参照できます。

back to the top
関連情報
詳細については、以下の Microsoft Developer Network (MSDN) Web サイトを参照してください。back to the top

警告: この記事は自動翻訳されています

プロパティ

文書番号:319292 - 最終更新日: 12/03/2012 06:52:00 - リビジョン: 7.0

Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# 2005 Express Edition, Microsoft Visual C# 2008 Express Edition

  • kbsweptvs2008 kbhowtomaster kbmt KB319292 KbMtja
フィードバック
ent.createElement('meta');m.name='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?">