728x90
반응형
C#에서 System.Resources.MissingManifestResourceException 예외는 리소스(.resx) 파일을 찾지 못했을 때 주로 발생합니다. 즉, 코드에서 ResourceManager로 특정 리소스를 로드하려고 하는데 어셈블리에 해당 리소스가 포함되지 않았거나, 네임스페이스/이름이 일치하지 않을 때 발생합니다.
📌 주요 발생 원인
- 리소스 이름 불일치
- ResourceManager("MyProject01.Properties.Resources", typeof(Program).Assembly) 와 같이 리소스를 찾을 때 지정한 이름이 .resx 파일과 일치하지 않는 경우.
- .resx 파일이 네임스페이스 + 파일명 형식으로 내장되는데, 이 이름이 코드에서 사용한 것과 달라서 생김.
- 빌드 액션(Build Action) 문제
- .resx 파일의 Build Action(빌드 작업)이 Embedded Resource(포함 리소스)가 아닌 경우.
- 보통 Embedded Resource(포함 리소스)여야 dll 안에 포함됨.
- 리소스 파일 위치/경로 문제
- 프로젝트 구조에서 폴더가 다르거나 namespace 가 달라서 발생.
- 위성 어셈블리(satellite assembly) 문제
- 다국어 지원(예: Resources.ko.resx) 할 때 리소스 파일이 올바르게 포함되지 않으면 발생.
- 클래스명/네임스페이스 변경
- 프로젝트 리팩토링 후 네임스페이스나 어셈블리 이름이 바뀌었는데, 리소스 접근 코드가 예전 것을 참조하는 경우.
✅ 해결 방법
- 리소스 이름 확인
- Visual Studio에서 .resx 파일을 선택하고 속성(F4) → 빌드 작업 = Embedded Resource (포함 리소스) 인지 확인.
- 네임스페이스 + 파일명 확인.
예: MyProject01.Properties.Resources.resx → MyProject01 .Properties.Resources
12var rm = new ResourceManager(" MyProject01 .Properties.Resources", typeof(Program).Assembly);string value = rm.GetString("Hello");cs - 네임스페이스 동기화
- .resx 파일의 네임스페이스가 실제 프로젝트 네임스페이스와 맞는지 확인.
- 코드와 동일하게 수정.
- 빌드 후 DLL에 포함 여부 확인
- 빌드된 DLL을 ILSpy, dotPeek 같은 도구로 열어서 리소스가 포함되어 있는지 확인.
- 없다면 Embedded Resource 설정이 잘못된 것.
- 다국어 리소스 문제 해결
- Resources.resx와 Resources.ko.resx 같은 파일이 같은 경로에 있는지 확인.
- CultureInfo를 잘못 지정했는지도 확인.
- 강제 지정 방법
- 혹시 자동 생성 코드(Resources.Designer.cs)가 꼬였을 경우,
- Project > Properties > Resources.resx 우클릭 > '사용자 지정 도구 실행' 클릭
- 혹은, 직접 리소스 매니저 생성:
12ResourceManager rm = new ResourceManager("MyProject01.Properties.Resources", Assembly.GetExecutingAssembly());string msg = rm.GetString("HelloWorld");cs
728x90
반응형
'IT > C#' 카테고리의 다른 글
[C#] class vs struct 쉽게 정리 (0) | 2025.09.15 |
---|---|
[C#] WinForms Button 혹은 다른 Control에 세로 텍스트 적용하기. (1) | 2025.08.25 |
[C#] OpenCvSharp4 사용하여 이미지 발광영역 Rectangle 검출하기 (0) | 2025.08.25 |
[C#] 스펙트럼 데이터 삼자극치(XYZ) 계산하기. 색좌표(CIE1931 x, y) 계산하기. C# 구현 예제. (2) | 2025.08.25 |
[C#] Excel Workbook XML 파일 형식으로 저장하기 (Workbook.SaveAs) (37) | 2024.12.05 |