MSVS2019 버전에서 제작한 C# WPF로 제작한 프로젝트를 MSVS2026에서 열어 빌드를 했는데 아래와 같은 에러가 발생되었다.
| 파일이나 어셈블리 'Microsoft.Windows.Shell, Version=3.0.50506.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 지정된 파일을 찾을 수 없습니다. |
MSVS2026에서 열때 기존 .Net Framework 버전이 설치 되어 있지 않아서 .Net Framework 4.8로 자동 변경한 상태였다.
XDG0003 오류는 Visual Studio의 XAML 디자이너나 빌드 프로세스가 참조된 어셈블리를 찾거나 로드할 수 없을 때 발생합니다. 특히 Microsoft.Windows.Shell은 매우 오래된 라이브러리(WPF Shell Integration Library)로, .NET Framework 4.5 이후부터는 해당 기능이 WPF 자체에 통합되었기 때문에 최신 환경에서 충돌이나 누락이 발생하기 쉽습니다.
이 방법은 외부 DLL 의존성을 제거하여 향후 호환성 문제를 예방합니다.
- 참조 제거:
- 솔루션 탐색기(Solution Explorer)의 '참조(References)'에서 Microsoft.Windows.Shell을 찾아 삭제합니다.
- XAML 네임스페이스 수정:
- 기존 XAML 파일 상단에 선언된 외부 네임스페이스를 제거합니다.
xmlns:shell="clr-namespace:Microsoft.Windows.Shell;assembly=Microsoft.Windows.Shell"
- 기존 XAML 파일 상단에 선언된 외부 네임스페이스를 제거합니다.
- 코드 수정 (WindowChrome 예시):
- 기존에 shell:WindowChrome 등으로 사용하던 코드를 표준 태그로 변경합니다. 표준 WindowChrome은 기본 WPF 네임스페이스에 포함되어 있어 별도의 접두사(prefix)가 필요 없습니다.
기존에 사용했던 shell 접두사를 삭제하면 문제가 해결 됩니다.
<Window ...> <WindowChrome.WindowChrome> <WindowChrome CaptionHeight="30" ... /> </WindowChrome.WindowChrome> </Window>변경 전:
<Window ... xmlns:shell="..."> <shell:WindowChrome.WindowChrome> <shell:WindowChrome CaptionHeight="30" ... /> </shell:WindowChrome.WindowChrome> </Window> - 기존에 shell:WindowChrome 등으로 사용하던 코드를 표준 태그로 변경합니다. 표준 WindowChrome은 기본 WPF 네임스페이스에 포함되어 있어 별도의 접두사(prefix)가 필요 없습니다.
방법 2: 기존 DLL 유지 및 설정 수정 (빠른 해결)
코드 수정 없이 기존 라이브러리를 그대로 사용해야 한다면, 빌드 환경이 해당 DLL을 제대로 인식하도록 설정을 강제해야 합니다.
- 로컬 복사 (Copy Local) 설정 확인:
- 솔루션 탐색기에서 Microsoft.Windows.Shell 참조를 선택합니다.
- F4를 눌러 속성 창을 엽니다.
- 로컬 복사 (Copy Local) 항목이 True로 되어 있는지 확인합니다. 만약 False라면 True로 변경합니다.
- 파일 차단 해제 (Unblock):
- 해당 DLL 파일이 있는 실제 폴더로 이동합니다.
- Microsoft.Windows.Shell.dll 파일을 우클릭하여 **속성(Properties)**을 엽니다.
- 창 하단에 차단 해제(Unblock) 체크박스나 버튼이 있다면 체크/클릭 후 적용합니다. (인터넷에서 다운로드된 구버전 DLL이 보안 문제로 차단되는 경우가 많습니다.)
- 캐시 정리 (Clean Build):
- Visual Studio를 종료합니다.
- 프로젝트 폴더 내의 bin 폴더와 obj 폴더를 완전히 삭제합니다.
- Visual Studio를 다시 열고 **솔루션 다시 빌드(Rebuild Solution)**를 실행합니다.
요약
작성하신 프로젝트가 .NET Framework 4.5 이상(최신 버전)을 타겟팅한다면, 방법 1을 적용하여 구형 DLL을 제거하고 WPF 표준 기능을 사용하는 것이 장기적으로 가장 안전한 해결책입니다.
LIST
'.NET' 카테고리의 다른 글
| C#에서도 inet_addr과 동일한 역할을 수행하는 함수 (0) | 2026.02.04 |
|---|---|
| C# float string format 전체 길이와 소수점 자리수 제어 (2) | 2025.07.28 |
| C#에서 DllImport를 사용해서 C++ DLL 함수를 호출할 때 진입점 못찾는 문제 관련 dumpbin 사용법 (1) | 2025.07.21 |
| C# Throw 발생 방법 (0) | 2025.05.13 |
| C# 폴더 내부 파일을 다른 폴더로 복사 (0) | 2025.05.13 |