. Net 프로그램 집합 에 자원 추가

작가: 송화    새 디 넷  2002 년 12 월 06 일
. Net 구조 에서 프로그램 집합 Assembly (프로그램 집합 또는 위탁 관리 Dll 이 라 고도 함) 는 자체 기술 의 설치 장치 로 PE (이식 가능) 형식의 Dll 또는 exe 파일 만 포함 할 수 있 고 여러 파일 로 구성 할 수 있 습 니 다. 예 를 들 어 자원 (비트 맵, JPEG 파일, 문자열 표 등), Dll 과 exe 등 입 니 다.
그 중에서 자원 은 범위 가 광범 위 한 개념 으로 사용자 와 상호작용 하 는 인터페이스 요소 (예 를 들 어 비트 맵, 아이콘 또는 커서), 응용 프로그램 에 필요 한 데이터 의 사용자 정의 파일 과 API 를 설치 하 는 버 전 파일, 메뉴 와 대화 상자 등 을 자원 으로 할 수 있다.자원 은 다시 사용 할 수 있 습 니 다. 필요 할 때 도 자원 을 편집 하고 수정 할 수 있 습 니 다. 우리 가 이렇게 할 때 이 자원 파일 들 을 독립 시 키 고 'Net 모듈' 과 같은 방식 으로 프로그램 집합 자원 을 구축 하여 자원 파일 을 소스 코드 에 독립 시 키 는 것 이 좋 습 니 다.이렇게 하면 서로 다른 프로그램 에서 이러한 자원 을 자 유 롭 게 인용 할 수 있 을 뿐만 아니 라 비 전문 프로그래머 들 이 자원 을 쉽게 수정 할 수 있다 (물론 프로그래머 나 간단 한 일괄 처리 파일 을 통 해 그들 을 새로운 자원 파일 로 재 컴 파일 할 수 있다). 이러한 독립 적 으로 자원 파일 을 수정 하 는 것 은 이 를 인용 하 는 프로그램 집합 에 영향 을 주지 않 는 다.또한 자원 파일 을 사용 하면 응용 프로그램 을 다른 언어 로 현지 화 하 는 데 도 도움 이 된다.보조 프로그램 집합 은 바로 자원 만 포함 하고 프로그램 코드 를 포함 하지 않 기 때문에 응용 프로그램의 현지 화 프로 그래 밍 에 광범 위 하 게 사용 된다.Net 구 조 는 자원 파일 에 많은 지원 을 제공 합 니 다.Visual Studio. Net 통합 개발 환경 IDE 를 사용 하면 자원 파일 을 쉽게 만 들 수 있 습 니 다. 프로젝트 에 자원 을 추가 하 는 방법 은 창, 라 이브 러 리 를 추가 하 는 것 과 마찬가지 로 간단 합 니 다. 유일 하 게 다른 것 은 자원 을 설정 해 야 하 는 'BuildAction' 속성 을 'Embedded Resource' 로 한 다음 에 이 자원 을 사용 할 수 있 습 니 다.
자원 생 성
위 에서 알 수 있 듯 이 문자열 표 는 매우 흔히 볼 수 있 는 자원 이다.이러한 자원 파일 을 만 들 려 면 다음 과 같은 두 가지 방법 이 있 습 니 다. 1). Net 명령 행 도구 ResGen 을 사용 하여 만 듭 니 다.먼저 자원 내용 을 포함 하 는 텍스트 파일 을 만 듭 니 다. 메모 장, EditPlus 등 일반적인 텍스트 편집 소프트웨어 를 사용 할 수 있 습 니 다.이 텍스트 파일 은 필요 한 '키 쌍' 으로 구성 되 어 있 으 며, 키 의 이름 은 프로그램 에서 참조 할 수 있 으 며, 키 이름 을 설정 한 후 문자열 값 을 이 키 에 부여 하면 파일 생 성 을 완료 할 수 있 습 니 다.예 를 들 어 다음 문단 에 이러한 자원 이 생 성 되 었 습 니 다. 아래 형식 으로 userinfo. txt 파일 로 저장 합 니 다: < ccdnobr>
<ccid_code>Username="Songh";
Sex="Boy";
Birthday="1973-01-15";
Salary="5000RMB";</ccid_code>

그리고 텍스트 파일 을 자원 파일 로 변환 합 니 다. 이것 은 ResGen 도 구 를 통 해 이 루어 집 니 다.다음 문 구 를 실행 합 니 다: ResGen userinfo. txt 는 자원 파일 userinfo. resources 를 생 성 합 니 다.또한, ResGen 은 XML 형식 을 기반 으로 한. resX 자원 파일 을 만 들 수 있 으 며, 다음 명령 을 실행 하면 ResGen userinfo. resources userinfo. resx 는 Xml 형식의 자원 userinfo. resx 를 생 성 합 니 다.그러나 ResGen 도 구 는 이미지 자원 의 조작 을 지원 하지 않 고 아래 의 방법 은 이러한 제한 을 가지 지 않 습 니 다.
2) 、 리 소스 라이터 클래스 사용
자원 파일 을 만 들 기 쉽 도록. Net 구 조 는 이미지 등 각종 자원 형식의 생 성 을 지원 하기 위해 리 소스 라이터 클래스 를 제공 합 니 다.리 소스 라이터 클래스 에 포 함 된 방법 은 시스템 의 기본 형식 으로 자원 을 출력 파일 이나 출력 흐름 에 기록 할 수 있 습 니 다.방법 1) 과 달리 이곳 통일 은 한 과정 에서 이 루어 진다.
자원 파일 을 만 들 려 면 리 소스 Writer 류 의 구조 함수 초기 화 클래스 인 스 턴 스 를 호출 하고 스 트림 이나 파일 이름 을 제공 하 십시오.자원 의 실제 내용 은 AddResource 방법 을 호출 하여 완성 합 니 다. AddResource 방법 은 자원 을 이름과 값 쌍 으로 지정 합 니 다.자원 의 실제 기록 은 Generate 방법 을 사용 하여 이 루어 져 야 합 니 다. 그러나 Close 방법 으로 이 Resource Writer 를 닫 을 때 Generate 방법 을 암시 적 으로 호출 합 니 다.
리 소스 라이터. addResource () 방법 은 자원 을 쓸 목록 에 자원 을 추가 합 니 다.리 소스 라이터 클래스 의 인 스 턴 스 를 만 든 후 이 방법 은 2GB 이상 의 자원 을 추가 할 수 있 습 니 다. 다음 리 셋 방법 중 하 나 는 자원 목록 에 string 자원 을 추가 하 는 데 사 용 됩 니 다.
<ccid_code>public void AddResource(
   string name,//  
   string value// 
);</ccid_code>

여기 서 AddResource 방법의 첫 번 째 매개 변 수 는 키 이름 을 지정 하고 두 번 째 매개 변 수 는 값 을 지정 합 니 다.이 방법 을 여러 번 호출 하면 문자열 표 의 생 성 을 완성 할 수 있 습 니 다.또한 이미지 자원 을 추가 하면 실례 화 된 이미지 로 이 루어 질 수 있 습 니 다. (이 때 System. Drawing 이름 공간 을 추가 하 십시오.)
다음 코드 세그먼트 에 서 는 문자열 표 와 그림 을 포함 하 는 자원 파일 userinfo. resources 를 생 성 합 니 다.
<ccid_code>using System;
using System.Resources;
using System.Drawing;
public class RS
{
  public static void Main()
  {
    ResourceWriter rw=new 
ResourceWriter("userinfo.resources");//         ResourceWriter   。  
Image image=Image.FromFile("photo.gif");//   Image 
      rw.AddResource("Photo",image);//    
      rw.AddResource("Username","songh");//     
      rw.AddResource("Sex","boy");//     
      rw.AddResource("Birthday","1973-01-15");//     
      rw.AddResource("Salary","5000RMB");//     
      rw.Close();//  ResourceWriter     Generate()              。
   }
}</ccid_code>

위의 코드 는 먼저 그래 픽 파일 photo. gif 를 열 고 Image 대상 을 만 듭 니 다.이렇게 할 때 이 그래 픽 파일 은 프로젝트 실행 가능 한 파일 의 디 렉 터 리 (보통 프로젝트 의 \ Bin \ Debug 디 렉 터 리) 에 존재 하거나 Image. FromFile () 의 방법 매개 변수 에서 그림 의 전체 경 로 를 지정 해 야 합 니 다.그리고 AddResource () 방법 을 몇 번 호출 하여 문자열 자원 을 ResourceWriter 대상 에 추가 합 니 다.마지막 으로 Close () 방법 으로 ResourceWriter 대상 을 닫 고 Generate () 방법 으로 자원 을 파일 userinfo. resources 에 기록 합 니 다.
이상 코드 를 컴 파일 하고 실행 하면 자원 파일 userinfo. resources 를 만 듭 니 다.
상기 두 가지 방식 으로 생 성 된 자원 파일 은 모두 하나의 외부 파일 로 프로그램 집중 에 추가 하거나 Dll 또는 exe 에 내장 할 수 있 습 니 다.다음은 윈도 프로그램 에서 자원 파일 을 사용 하 는 방법 을 계속 설명 합 니 다.
자원 파일 사용
Visual Studio. Net 통합 개발 환경 IDE 를 사용 하면 자원 파일 을 프로그램 에 쉽게 추가 할 수 있 습 니 다.생 성 된 프로젝트 에 존재 하 는 자원 파일 을 추가 하기 만 하면 속성 을 간단하게 설정 하면 자원 파일 을 이 프로그램 에 삽입 할 수 있 습 니 다.다음은 C \ # Windows 콘 솔 인 스 턴 스 를 통 해 위 에서 만 든 userinfo. resources 자원 파일 을 사용 하 는 것 을 설명 합 니 다.
먼저, C \ # Windows Console 프로젝트 ResourceUser info 를 만 들 고 '프로젝트 \ 기 존 항목 추가' 를 열 고 앞에서 만 든 자원 파일 User info. resources 를 찾 아 이 프로젝트 에 추가 합 니 다.
그리고 이 자원 파일 을 선택 하여 속성 BuildAction (생 성 작업) 을 Embedded Resource (삽 입 된 자원) 로 설정 하면 자원 파일 을 출력 프로그램 에 삽입 할 수 있 습 니 다.
이제 이 자원 파일 을 사용 할 수 있 습 니 다.System. Resources 이름 공간의 리 소스 관리자 클래스 는 실행 할 때 특정 자원 에 편리 하 게 접근 할 수 있 는 경 로 를 제공 합 니 다.구체 적 으로 GetObject 와 GetString 방법 을 통 해 이 루어 질 수 있 으 며, 키 이름 을 매개 변수 로 하면 해당 하 는 값 을 되 돌려 줍 니 다.
리 소스 관리자 클래스 의 구조 함수 가 리 소스 관리자 클래스 의 새로운 인 스 턴 스 를 초기 화 합 니 다. 리 셋 방법 중 하 나 는 일부 파일 에 포 함 된 자원 을 찾 습 니 다. 이 파일 들 은 주어진 Assembly 를 사용 하여 지정 한 루트 이름 에서 내 보 냅 니 다.
<ccid_code>public ResourceManager(
   string baseName,
   Assembly assembly
)</ccid_code>

그 중에서 인자 baseName 은 자원 의 루트 이름 을 표시 합 니 다.루트 이름 은 프로그램 이름 공간 과 자원 파일 이름 (확장자 없 음) 으로 구성 되 어 있 습 니 다.이렇게 하면 이 예 에서 자원 의 루트 이름 은 User info Resource. User info 이 어야 합 니 다. GetManifest Resource Names () 방법 을 호출 하여 이 이름 을 가 져 올 수 있 습 니 다.
또 다른 매개 변수 assembly 는 현재 메 인 프로그램 집합 을 표시 합 니 다. 이 예 에서 메 인 프로그램 집합 도 실행 중인 프로그램 집합 입 니 다.실행 중인 프로그램 집합 을 가 져 오 는 간단 한 방법 은 Assembly. GetExecuting Assembly () 방법 을 호출 하 는 것 입 니 다.
리 소스 관리자 인 스 턴 스 를 가 져 온 후 키 이름 을 지정 하면 해당 하 는 자원 을 얻 을 수 있 습 니 다.
다음 표 는 프로그램 에서 사용 하 는 부분 컨트롤 입 니 다:

유별
TextBox
TextBox
TextBox
TextBox
PictureBox
명칭.
username
sex
birthday
salary
photo

이 컨트롤 들 은 공구 상자 에서 직접 디자이너 에 끌 어 다 놓 을 수 있다.전체 소스 코드: < ccdnobr>
<ccid_code>using System.reflection;
  using System.Resources;
  private System.Resources.ResourceManager rm;
  public Form1()
{
  InitializeComponent();
  Assembly assembly=Assembly.GetExecutingAssembly();//        
  Rm=new ResourceManager("ResourceUserinfo.Userinfo",assembly);//        
photo.iamge=(Image)rm.GetObjetct("Photo");
username.Text=rm.GetString("Username");
sex.Text=rm.GetString("Sex");
birthday.Text=rm.GetString("Birthday");
salary.Text=rm.GetString("Salary");
}</ccid_code>

이 코드 를 실행 하면 자원 파일 의 내용 을 꺼 낼 수 있 습 니 다.

좋은 웹페이지 즐겨찾기