System.Drawing.Bitmap를 사용할 때 발생하는 "The type initializer for 'Gdip' threw an exception." 오류를 해결하는 방법에 대해 알아봅니다.
1. 상황
프로젝트에서 System.Drawing.Bitmap을 사용하려고 할 때 Exception이 발생하며 "The type initializer for 'Gdip' threw an exception."와 같은 메시지가 출력됩니다.
프로젝트는 Docker Desktop을 사용해 Docker를 지원하는 프로젝트였습니다.
2. 원인
MS에서 Docker 지원 프로젝트를 만들면 자동으로 생성해주는 Dockerfile에 의해 생성되는 컨테이너는 libgdiplus를 지원하지 않아 발생하는 문제였습니다.
3. 해결
Dockerfile에 libgidplus를 지원할 수 있는 코드를 추가해 주면 됩니다. 코드는 다음 글에서 참고하였습니다: Can't use System.Drawing.Common in microsoft/dotnet:runtime
# Your Dockerfile
#...
# install System.Drawing native dependencies
RUN apt-get update \
&& apt-get install -y --allow-unauthenticated \
libc6-dev \
libgdiplus \
libx11-dev \
&& rm -rf /var/lib/apt/lists/*
#...
위와 같이 Dockefile을 수정 후 코드를 실행하면 정상적으로 동작합니다.
반응형
'Programming > C#' 카테고리의 다른 글
[dotNet5.0 | React] React 프로젝트 Dockerfile 빌드 지원 (0) | 2021.04.12 |
---|---|
[C# | WPF] .Net 5.0 WPF에서 WinForm의 OpenFileDialog를 사용하기. (0) | 2021.04.09 |
[C# | FO-DICOM] Dicom에서 이미지를 추출하는 방법: A generic error occurred in GDI+. (0) | 2021.03.25 |
[C#] IsNullOrEmpty와 IsNullOrWhiteSpace의 차이점 (0) | 2021.03.08 |
[EF] Entity Framework와 Repository 패턴을 함께 쓰지 말아야 하는 이유. (0) | 2021.02.19 |