본문 바로가기
.NET

XDF0003 Microsoft.Windows.Shell 오류 발생 해결 방법

by leo21c 2026. 1. 23.

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 의존성을 제거하여 향후 호환성 문제를 예방합니다.

  1. 참조 제거:
    • 솔루션 탐색기(Solution Explorer)의 '참조(References)'에서 Microsoft.Windows.Shell을 찾아 삭제합니다.
  2. XAML 네임스페이스 수정:
    • 기존 XAML 파일 상단에 선언된 외부 네임스페이스를 제거합니다.
      xmlns:shell="clr-namespace:Microsoft.Windows.Shell;assembly=Microsoft.Windows.Shell"
      
  3. 코드 수정 (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>
    

방법 2: 기존 DLL 유지 및 설정 수정 (빠른 해결)

코드 수정 없이 기존 라이브러리를 그대로 사용해야 한다면, 빌드 환경이 해당 DLL을 제대로 인식하도록 설정을 강제해야 합니다.

  1. 로컬 복사 (Copy Local) 설정 확인:
    • 솔루션 탐색기에서 Microsoft.Windows.Shell 참조를 선택합니다.
    • F4를 눌러 속성 창을 엽니다.
    • 로컬 복사 (Copy Local) 항목이 True로 되어 있는지 확인합니다. 만약 False라면 True로 변경합니다.
  2. 파일 차단 해제 (Unblock):
    • 해당 DLL 파일이 있는 실제 폴더로 이동합니다.
    • Microsoft.Windows.Shell.dll 파일을 우클릭하여 **속성(Properties)**을 엽니다.
    • 창 하단에 차단 해제(Unblock) 체크박스나 버튼이 있다면 체크/클릭 후 적용합니다. (인터넷에서 다운로드된 구버전 DLL이 보안 문제로 차단되는 경우가 많습니다.)
  3. 캐시 정리 (Clean Build):
    • Visual Studio를 종료합니다.
    • 프로젝트 폴더 내의 bin 폴더와 obj 폴더를 완전히 삭제합니다.
    • Visual Studio를 다시 열고 **솔루션 다시 빌드(Rebuild Solution)**를 실행합니다.

요약

작성하신 프로젝트가 .NET Framework 4.5 이상(최신 버전)을 타겟팅한다면, 방법 1을 적용하여 구형 DLL을 제거하고 WPF 표준 기능을 사용하는 것이 장기적으로 가장 안전한 해결책입니다.

LIST