현재 오프라인 상태입니다. 인터넷에 다시 연결하기를 기다리고 있습니다.

Visual C#을 사용하여 리소스를 포함하거나 접근하는 방법

이 문서는 Microsoft 기계 번역 소프트웨어를 이용하여 번역되었으며 Microsoft Community에 의한 Community Translation Framework(CTF) 기술 혹은 사람이 번역한 내용에 의하여 사후 편집될 수 있습니다. Microsoft는 Knowledge Base에 있는 모든 문서에 다양한 언어로 접근할 수 있도록 하기 위하여 기계 번역, 사람에 의한 번역 및 커뮤니티가 편집한 내용을 모두 제공합니다. 번역된 문서는 어휘, 구문 및/혹은 문법에 오류가 있을 수 있습니다. Microsoft는 번역 오류로 인한 부정확성, 오류 및/또는 손해와 이를 고객이 사용하는 데에 대하여 책임을 지지 않습니다.

이 문서의 영문 버전 보기:319292
이 문서의 Microsoft Visual Basic.NET 버전을 참조 하십시오. 319291.

이 문서는 다음 Microsoft.NET Framework 클래스 라이브러리 네임 스페이스를 참조합니다.
  • System.Reflection
  • System.IO

이 작업의

요약
이 문서에서는 리소스 어셈블리에 일부로 포함 및 다음 런타임에 리소스에 액세스 하려면 C#를 사용 하는 방법을 설명 합니다.

back to the top

개요

.NET Framework 컴파일된 어셈블리의 일부로 파일을 캡슐화 할 수 있습니다. 이러한 파일이 포함 된 리소스로 알려져 있습니다. 이 리소스는 어셈블리와 연결 된.resx 및.resources 파일에서 완전히 분리 합니다. System.Reflection 네임 스페이스의 어셈블리 클래스를 통해 런타임에 이러한 리소스에 액세스할 수 있습니다.

매니페스트 리소스를 포함 하는의 주요 장점이 있는 파일이 컴파일된 어셈블리의 일부 이므로, 사용자 수 없습니다 실수로 삭제 하거나 중요 한 응용 프로그램을 실행 하지 못할 수 있습니다 어떤 경우에는 파일을 찰입니다. 이 방법의 한 가지 제한은 없습니다 저장 하는 변경 내용을이 파일을 어셈블리에 프로그램을 다시 컴파일하지 않고도입니다. 이 때문에 포함 리소스로 응용 프로그램의 수명 동안 변경 되지 않는 파일이 포함 됩니다.

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.IOSystem.Reflection 네임 스페이스를 가져옵니다.
   using System.IO;   using System.Reflection;				
System.IO 네임 스페이스의 정의 제공 하 고 System.Reflection 네임 스페이스는 어셈블리에 포함 되어 있는 리소스에 액세스할 수 있는 메서드를 제공 하는 어셈블리 클래스를 정의 합니다.

를 일반 선언 영역에 다음 선언할 때 폼이 로드 될 때 어셈블리에서 리소스를 읽는.
   Assembly _assembly;   Stream _imageStream;   StreamReader _textStreamReader;				
참고: 코드 편집기에서 폼의 Load 이벤트에 액세스 하려면 디자인 편집기에서 폼을 두 번 클릭 합니다.

현재 코드가 실행 중인 어셈블리에서 리소스를 읽으려면 해당 어셈블리의 인스턴스를 가져와야 합니다. 이렇게 하려면 다음과 같이 GetExecutingAssembly 메서드는 어셈블리의 사용.
   _assembly = Assembly.GetExecutingAssembly();				
스트림에 리소스에서 정보를 읽는 GetManifestResourceStream에 대 한 메서드 호출을 사용 하 여 수행 됩니다. 이 메서드에 전달 되는 액세스 하는 리소스의 이름입니다. 폼의 Load 이벤트가 실행 될 때 해당 해당 스트림을 두 리소스 다음 읽혀집니다.
   _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!");   }				
.NET에서는 구조적된 오류 처리 로 알려진, Try Catch 문은 어셈블리 클래스의 인스턴스는 리소스에 액세스 하는 동안 발생 한 모든 오류를 catch 하는 데 사용 됩니다.

back to the top

리소스 표시

이 예제에서는 두 개의 단추가 포함 된 리소스를 표시 하려면 첫 번째 단추를 클릭할 때를 어셈블리에서 읽을 리소스 기반으로 비트맵 이미지를 만들고 폼의 PictureBox 컨트롤에 표시 합니다. 두 번째 단추가 텍스트 리소스에서 읽고 텍스트 상자에 텍스트를 표시 합니다.

포함 된 리소스를 표시 하려면 다음과이 같이 하십시오.
  1. PictureBox 컨트롤을 폼에 추가 합니다.
  2. Button 컨트롤을 폼에 추가 하 고 이미지를 표시하려면 Text 속성을 변경 합니다.
  3. 해당 Click 이벤트 코드 뷰어를 열려면 단추를 두 번 클릭 한 다음이 이벤트에서 다음 코드를 붙여넣습니다.
       try   {      pictureBox1.Image = new Bitmap(_imageStream);			       }   catch    {      MessageBox.Show("Error creating image!");   }					
    이 코드를 폼의 Load 이벤트에 읽은 리소스 스트림을 기반으로 비트맵 새 인스턴스를 생성 합니다.

  4. TextBox 컨트롤을 폼에 추가 합니다.
  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 또는 Visual Studio 2008의 코드를 변경 해야 합니다. Windows Forms 프로젝트를 만들면 C# 폼을 프로젝트에 추가 기본적으로. 이 폼 이름은 Form1입니다. Form1.cs를 form1. designer.cs 형식을 나타내는 두 개의 파일이 지정 됩니다. Form1.cs에서 코드를 작성 합니다. Designer.cs 파일을 있는 Windows Forms 디자이너에서 작성 하는 모든 동작을 구현 하는 코드 컨트롤을 추가 하 여 수행 하는. Visual C# 2005 또는 Visual Studio 2008에서 Windows Forms 디자이너에 대 한 자세한 내용은 다음 Microsoft 웹 사이트를 방문 하십시오.back to the top

문제 해결

리소스 이름은 대/소문자를 구분 하지 않습니다, 때문에 맞춤법과 액세스할 수 있는 리소스의 경우 사용 하 고 있는지 확인 합니다. ILDASM을 리소스 정확한 철자를 확인 하기 위해 매니페스트 데이터를 읽는 데 사용할 수 있습니다.

back to the top
참조
자세한 내용은 다음 Microsoft Developer Network (MSDN) 웹 사이트를 참조 하십시오.back to the top

경고: 이 문서는 자동으로 번역되었습니다.

속성

문서 ID: 319292 - 마지막 검토: 05/04/2015 02:33:00 - 수정: 4.0

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

  • kbsweptvs2008 kbhowtomaster kbmt KB319292 KbMtko
피드백
m=document.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?">