Microsoft MVP성태의 닷넷 이야기
오류 유형: 63. WPF - XamlParseException 대응 방법 [링크 복사], [링크+제목 복사],
조회: 32664
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 4개 있습니다.)

WPF - XamlParseException 대응 방법


WPF 프로그램을 하다보면 종종 XamlParseException이 발생하는 경우가 있습니다. 예를 들어, 아래와 같이 XAML 페이지에서 "생성자"에서 오류가 포함되어 있는 경우,

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
        throw new ApplicationException();
    }
}

VS.NET 디버거는 아래와 같이 정상적으로 소스 코드를 가리키지 못할 뿐더러 이를 XamlParseException 예외로 출력해 버리는 것으로 끝납니다.

[그림 1: 생성자에서 오류가 있는 경우 - XamlParseException]
xaml_first_chance_exception_1.PNG

심지어, 아래와 같이 "DependencyProperty"의 OnPropertyChanged 유의 정적 함수 내에서 오류가 있는 코드가 실행되는 경우라면,

public partial class UserControl1 : UserControl
{
    public static readonly DependencyProperty IsTestProperty =
         DependencyProperty.Register("IsTest", typeof(bool), typeof(UserControl1),
         new FrameworkPropertyMetadata(false, OnPropertyChanged));

    public bool IsTest
    {
        set
        {
            SetValue(IsTestProperty, value);
        }
        get
        {
            return (bool)GetValue(IsTestProperty);
        }
    }

    private static void OnPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
    {
        throw new ApplicationException();
    }

    public UserControl1()
    {
        InitializeComponent();
    }
}

VS.NET 디버거는 아래와 같이 xaml 페이지를 가리키고 역시 XamlParseException 예외를 잡아냅니다.

[그림 2: 의존 속성의 정적 메서드에서 오류가 있는 경우 - XamlParseException]
xaml_first_chance_exception_2.PNG

이렇게 XamlParseException 예외가 발생한 경우,,, 어디서부터 디버깅을 해야 할지 모르는 분들이 계신데요. 이런 분들은 아래의 글을 다시 한번 읽어보시면 ^^ 예외가 발생한 코드를 100% 잡아내실 수 있습니다.

First-Chance Exception
; https://www.sysnet.pe.kr/2/0/510




[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 4/10/2022]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2011-04-26 04시15분
[김종필] XamlParseException 으로 검색하다가 여기 까지 왔습니다.
제가 궁금했던 부분이 어느 정도 해소되었네요.
좋은 글 감사합니다.
[guest]
2025-02-11 09시57분
On exactly when XAML bindings are evaluated if an element is not yet loaded
; https://devblogs.microsoft.com/oldnewthing/20250205-00/?p=110840
정성태

... [16]  17  18  19  20  21  22  23  24  25  26  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
13577정성태3/9/202411952닷넷: 2229. C# - 닷넷을 위한 난독화 도구 소개 (예: ConfuserEx)
13576정성태3/8/202411782닷넷: 2228. .NET Profiler - IMetaDataEmit2::DefineMethodSpec 사용법
13575정성태3/7/202412469닷넷: 2227. 최신 C# 문법을 .NET Framework 프로젝트에 쓸 수 있을까요?
13574정성태3/6/202411917닷넷: 2226. C# - "Docker Desktop for Windows" Container 환경에서의 IPv6 DualMode 소켓
13573정성태3/5/202410514닷넷: 2225. Windbg - dumasync로 분석하는 async/await 호출
13572정성태3/4/202410398닷넷: 2224. C# - WPF의 Dispatcher Queue로 알아보는 await 호출의 hang 현상파일 다운로드1
13571정성태3/1/202410367닷넷: 2223. C# - await 호출과 WPF의 Dispatcher Queue 동작 확인파일 다운로드1
13570정성태2/29/202411602닷넷: 2222. C# - WPF의 Dispatcher Queue 동작 확인파일 다운로드1
13569정성태2/28/202411355닷넷: 2221. C# - LoadContext, LoadFromContext 그리고 GAC파일 다운로드1
13568정성태2/27/202411181닷넷: 2220. C# - .NET Framework 프로세스의 LoaderOptimization 설정을 확인하는 방법파일 다운로드1
13567정성태2/27/202411109오류 유형: 898. .NET Framework 3.5 이하에서 mscoree.tlb 참조 시 System.BadImageFormatException파일 다운로드1
13566정성태2/27/202411062오류 유형: 897. Windows 7 SDK 설치 시 ".NET Development" 옵션이 비활성으로 선택이 안 되는 경우
13565정성태2/23/20249533닷넷: 2219. .NET CLR2 보안 모델에서의 개별 System.Security.Permissions 제어
13564정성태2/22/202411610Windows: 259. Hyper-V Generation 1 유형의 VM을 Generation 2 유형으로 바꾸는 방법
13563정성태2/21/202410991디버깅 기술: 196. windbg - async/await 비동기인 경우 메모리 덤프 분석의 어려움
13562정성태2/21/202410233오류 유형: 896. ASP.NET - .NET Framework 기본 예제에서 System.Web에 대한 System.IO.FileNotFoundException 예외 발생
13561정성태2/20/202411375닷넷: 2218. C# - (예를 들어, Socket) 비동기 I/O에 대한 await 호출 시 CancellationToken을 이용한 취소파일 다운로드1
13560정성태2/19/202411417디버깅 기술: 195. windbg 분석 사례 - Semaphore 잠금으로 인한 Hang 현상 (닷넷)
13559정성태2/19/202412554오류 유형: 895. ASP.NET - System.Security.SecurityException: 'Requested registry access is not allowed.'
13558정성태2/18/202411648닷넷: 2217. C# - 최댓값이 1인 SemaphoreSlim 보다 Mutex 또는 lock(obj)를 선택하는 것이 나은 이유
13557정성태2/18/20249787Windows: 258. Task Scheduler의 Author 속성 값을 변경하는 방법
13556정성태2/17/202410925Windows: 257. Windows - Symbolic (hard/soft) Link 및 Junction 차이점
13555정성태2/15/202411037닷넷: 2216. C# - SemaphoreSlim 사용 시 주의점
13554정성태2/15/202410344VS.NET IDE: 189. Visual Studio - 닷넷 소스코드 디컴파일 찾기가 안 될 때
13553정성태2/14/20249451닷넷: 2215. windbg - thin/fat lock 없이 동작하는 Monitor.Wait + Pulse
13552정성태2/13/20249635닷넷: 2214. windbg - Monitor.Enter의 thin lock과 fat lock
... [16]  17  18  19  20  21  22  23  24  25  26  27  28  29  30  ...