目次
概要
ステップバイステップのデモ
埋め込みリソースを追加する
アセンブリのマニフェストに埋め込まれているリソースにアクセスするには、次のように
リソースを表示
完全なコード
トラブルシューティング
ホームページ バックエンド開発 C#.Net チュートリアル C# を埋め込み、使用してリソース コードにアクセスする方法の詳細な説明

C# を埋め込み、使用してリソース コードにアクセスする方法の詳細な説明

Mar 14, 2017 pm 01:54 PM

C#で埋め込みリソースを使用するにはどうすればよいですか?

このステップバイステップのガイドでは、C# を使用してリソースをアセンブリの一部として埋め込み、実行時にリソースにアクセスする方法を示します。

概要

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

埋め込みマニフェスト リソースの主な利点は、これらのファイルがコンパイルされたアセンブリの一部であるため、ユーザーが誤って 削除したり、誤ってアプリケーションに入れたりすることができないことです。これにより、場合によっては重要なドキュメントに対するプログラムの実行が妨げられる可能性があります。このアプローチの制限の 1 つは、プログラムを再コンパイルしないと、このファイルのアセンブリへの変更を保存できないことです。このため、アプリケーションの存続期間中に変更されないファイルのみを埋め込みリソースとして含めてください。

ステップバイステップのデモ

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

埋め込みリソースを追加する

プロジェクトにリソースとして埋め込むテキスト ファイルと画像ファイルを追加するには、次の手順に従います:

  1. このデモ用に新しい Windows アプリケーション プロジェクトを作成します。このフォームは、実行時に実行アセンブリからアクセスされるリソースを表示するために使用されます。

  2. プロジェクト名を右クリックし、追加をクリックし、次に新しい項目の追加

  3. をクリックします。新しいプロジェクトダイアログボックスで、メニューからテキストファイルを選択し、ファイルを選択しますMyTextFile.txtという名前です。統合開発環境 (IDE) でファイルを開き、テキストを追加してファイルを閉じます。

  4. 手順 1 と 2 を繰り返して、ビットマップ イメージをプロジェクトに追加します。ただし、新しいプロジェクト タイプとして テキスト ファイル を選択する代わりに、ビットマップ ファイル を選択し、ファイル名を MyImage に変更します。 IDE で新しい画像を開くと、コンテンツが画像上に描画され、ファイルが閉じられます。

  5. ファイルのテキストまたはビットマップを右クリックし、

    プロパティ

  6. を選択します。

    プロパティダイアログボックスで、ビルドアクションプロパティを見つけます。デフォルトでは、このプロパティは content に設定されています。プロパティをクリックし、Build Action プロパティを Embedded Resource

  7. に変更します。他のファイルに対して手順 4 と 5 を繰り返します。

次回プロジェクトをビルドするときに、コンパイラーはこれらのファイルをアセンブリに追加します。リソースがプロジェクトに含まれるときに、コンパイラーがプロジェクトのルート名前空間を追加するリソースの名前。たとえば、プロジェクトのルート ネームスペースが MyNamespace の場合、リソースの名前は MyNamespace.MyTextFile.txt および MyNamespace.MyImage.bmp になります。



注意してください: リソース ファイル名では大文字と小文字が区別されます。リソースにアクセスするときは、ファイル名のスペルと大文字小文字を正確に使用する必要があります。ファイル名の正確なスペルと大文字小文字を使用しない場合、estResourceStream が返す場合、Man にアクセスするためのメソッド呼び出しは 何も行わず 、システムは例外をスローしません。

: これらのリソース名を確認したい場合は、Microsoft Intermediate Language 逆アセンブラ (ILDASM) を使用して、含まれているリソースをリストするマニフェスト データを表示できます。

リソースへのアクセス

アセンブリのマニフェストに埋め込まれているリソースにアクセスするには、次のように

System.IO

および System.Reflection 名前空間をインポートします。

   using System.IO;
   using System.Reflection;				
ログイン後にコピー

System.IO 名前空間はストリーム定義を提供し、 名前空間で定義された System.Reflectionassembly は、クラスがアセンブリに埋め込まれたリソースにアクセスするためのメソッドを提供します。

次の一般宣言領域で宣言すると、フォームが読み込まれるときにアセンブリからリソースを読み取ります:

   Assembly _assembly;
   Stream _imageStream;
   StreamReader _textStreamReader;				
ログイン後にコピー

: コード editor イベント でフォームの Load にアクセスするには、デザインエディターのフォーム。

現在のコードが実行されているアセンブリからリソースを読み取るには、そのアセンブリのインスタンスを取得する必要があります。これを行うには、次のようにアセンブリの GetExecutingAssembly メソッドを使用します。

   _assembly = Assembly.GetExecutingAssembly();				
ログイン後にコピー

はリソースからストリームに情報を読み取り、GetManifestResourceStream へのメソッド呼び出しを実行します。このメソッドに渡されるパラメータは、アクセスされるリソースの名前です。フォームの 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 では、構造化エラー処理) は、キャッチするために使用されますアセンブリ クラスのインスタンスがリソースにアクセスするときに発生します。

リソースを表示

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

埋め込みリソースを表示するには、次の手順に従います:

  1. ピクチャー ボックス コントロールをフォームに追加します。

  2. Text プロパティを Show Image

  3. に変更する前に、新しい
  4. Button

    コントロールをフォームに追加します。 ボタンをダブルクリックして、コード ビューアで Click イベントを開き、貼り付けますこの場合は次のコードです:

  5.    try
       {
          pictureBox1.Image = new Bitmap(_imageStream);			       }
       catch 
       {
          MessageBox.Show("Error creating image!");
       }					
    ログイン後にコピー

    このコードは、フォームの Load イベントで読み取られたビットマップに基づいて、リソース ストリームの新しいインスタンスを生成します。

  6. テキストボックスコントロールをフォームに追加します。

  7. 別の Button コントロールをフォームに追加し、その Text プロパティを GetText

  8. デザインエディターでボタンをダブルクリックして Click_Event を開き、次のコードを貼り付けますそのイベント:

  9.    try
       {
          if(_textStreamReader.Peek() != -1)
          {
             textBox1.Text = _textStreamReader.ReadLine();
          }
       }
       catch
       {
          MessageBox.Show("Error writing text!");
       }					
    ログイン後にコピー

    このコードは、読み取られる文字がストリーム内にまだ存在するかどうかを判断します。文字が見つかった場合は、テキスト ボックスにその行が読み上げられます。

  10. F5 キーを押してアプリケーションを実行します。

完全なコード

   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 または Visual Studio 2008 を使用している場合は、コードを変更する必要があります。 Windows フォーム プロジェクトを作成すると、Visual C# は既定でフォームをプロジェクトに追加します。このフォームの名前は Form1 です。フォームを表す 2 つのファイルは次のように呼ばれます。 Form1.cs と Form1.designer.cs。 Form1.cs にコードを記述します。 Designer.cs ファイルは、コントロールの追加によって実行されるすべてのアクションを実装する、Windows フォーム デザイナーによって記述されたコードです。 Visual C# 2005 または Visual Studio 2008 の Windows フォーム デザイナーの詳細については、以下の Microsoft を参照してください。 Web サイト:

http://msdn2.microsoft.com/en-us/library/ms173077.aspx

トラブルシューティング

リソース名では大文字と小文字が区別されるため、適切なスペルを使用していることを確認してください。大文字と小文字のリソースへのアクセス。 ILDASM を使用してマニフェストのデータを読み取り、リソースの正確なスペルを確認できます。

以上がC# を埋め込み、使用してリソース コードにアクセスする方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C# を使用した Active Directory C# を使用した Active Directory Sep 03, 2024 pm 03:33 PM

C# を使用した Active Directory のガイド。ここでは、Active Directory の概要と、C# での動作方法について、構文と例とともに説明します。

C# シリアル化 C# シリアル化 Sep 03, 2024 pm 03:30 PM

C# シリアル化のガイド。ここでは、C# シリアル化オブジェクトの導入、手順、作業、例についてそれぞれ説明します。

C# の乱数ジェネレーター C# の乱数ジェネレーター Sep 03, 2024 pm 03:34 PM

C# の乱数ジェネレーターのガイド。ここでは、乱数ジェネレーターの仕組み、擬似乱数の概念、安全な数値について説明します。

C# データ グリッド ビュー C# データ グリッド ビュー Sep 03, 2024 pm 03:32 PM

C# データ グリッド ビューのガイド。ここでは、SQL データベースまたは Excel ファイルからデータ グリッド ビューをロードおよびエクスポートする方法の例について説明します。

C# のパターン C# のパターン Sep 03, 2024 pm 03:33 PM

C# のパターンのガイド。ここでは、C# のパターンの概要と上位 3 種類について、その例とコード実装とともに説明します。

C# の素数 C# の素数 Sep 03, 2024 pm 03:35 PM

C# の素数ガイド。ここでは、C# における素数の導入と例を、コードの実装とともに説明します。

C# の階乗 C# の階乗 Sep 03, 2024 pm 03:34 PM

C# の Factorial のガイド。ここでは、C# での階乗の概要について、さまざまな例とコード実装とともに説明します。

マルチスレッドと非同期C#の違い マルチスレッドと非同期C#の違い Apr 03, 2025 pm 02:57 PM

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。

See all articles