어셈블리 바인딩 로깅 Assembly Binding Logging

Ad


런타임Runtime에 어셈블리 바인딩 오류가 발생하는 경우 아래와 같은 내용을 확인할 수 있습니다.

이 대화 상자 대신 JIT(Just-in-time) 디버깅을 호출하는
방법에 대한 자세한 내용은 이 메시지의 뒷부분을 참조하십시오.

************** 예외 텍스트 **************
System.IO.FileNotFoundException: 파일이나 어셈블리 'SampleNamespace, Version=1.0.0.1, Culture=neutral, PublicKeyToken=aaaaaaaaaaaaaaaa' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 지정된 파일을 찾을 수 없습니다.
파일 이름: 'SampleNamespace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=aaaaaaaaaaaaaaaa'
   위치: OtherNamespace.MyClass..ctor()

경고: 어셈블리 바인딩 로깅이 꺼져 있습니다.
어셈블리 바인딩 오류 로깅 기능을 사용하려면 레지스트리 값 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)를 1로 설정하십시오.
참고: 어셈블리 바인딩 오류 로깅 기능을 사용하도록 설정하면 그렇지 않은 경우보다 성능이 약간 떨어집니다.
이 기능을 끄려면 레지스트리 값 [HKLM\Software\Microsoft\Fusion!EnableLog]를 제거하십시오.



************** 로드된 어셈블리 **************
mscorlib
    어셈블리 버전: 4.0.0.0
    Win32 버전: 4.0.30319.34209 built by: FX452RTMGDR
    코드베이스: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
System
    어셈블리 버전: 4.0.0.0
    Win32 버전: 4.0.30319.34238 built by: FX452RTMGDR
    코드베이스: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Windows.Forms
    어셈블리 버전: 4.0.0.0
    Win32 버전: 4.0.30319.34251 built by: FX452RTMGDR
    코드베이스: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
    어셈블리 버전: 4.0.0.0
    Win32 버전: 4.0.30319.34209 built by: FX452RTMGDR
    코드베이스: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Configuration
    어셈블리 버전: 4.0.0.0
    Win32 버전: 4.0.30319.34209 built by: FX452RTMGDR
    코드베이스: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
    어셈블리 버전: 4.0.0.0
    Win32 버전: 4.0.30319.34234 built by: FX452RTMGDR
    코드베이스: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
OtherNamespace.MyClass
    어셈블리 버전: 1.0.0.0
    Win32 버전: N/A
    코드베이스: http://bbon.me/Apps/OtherNamespace.DLL
----------------------------------------
IFW.Windows.Forms
    어셈블리 버전: 4.0.0.6
    Win32 버전: 4.0.0.6
    코드베이스: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/IFW.Windows.Forms/v4.0_4.0.0.6__6b3a265306332740/IFW.Windows.Forms.dll
----------------------------------------
mscorlib.resources
    어셈블리 버전: 4.0.0.0
    Win32 버전: 4.0.30319.34209 built by: FX452RTMGDR
    코드베이스: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_ko_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------
System.Windows.Forms.resources
    어셈블리 버전: 4.0.0.0
    Win32 버전: 4.0.30319.34209 built by: FX452RTMGDR
    코드베이스: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_ko_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------

************** JIT 디버깅 **************
JIT(Just In Time) 디버깅을 사용하려면 이 응용 프로그램 또는 컴퓨터의
config 파일(machine.config)의 jitDebugging 값을
system.windows.forms 섹션에 설정해야 합니다.
또한 응용 프로그램은 디버깅할 수 있도록 컴파일되어야
합니다.

예:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

JIT 디버깅을 사용하면 처리되지 않은 모든 예외는
이 대화 상자에서 처리되지 않고 컴퓨터에 등록된 JIT
디버거에 보내집니다.

응용 프로그램 런타임에 어셈블리 바인딩 오류 로그를 활성화하여 문제를 추적할 수 있습니다.

어떤 어셈블리를 바인딩하려다 오류가 발생하는지는 로깅을 활성화하면 확인할 수 있습니다.

로깅 활성화

레지스트리 편집기를 실행하고 아래 키로 이동 후 값을 추가합니다.

HKLM\SOFTWARE\Microsoft\Fusion

이름 타입
EnableLog DWORD 1
ForceLog DWORD 1
LogFailures DWORD 1
LogResourceBinds DWORD 1
LogPath STRING PATH TO LOG FILES;e.g.)c:\FusionLog\

아래와 같이 레지스트리 값을 추가하면 로깅이 활성화됩니다.

설정이미지

로그확인

레지스트리 값 중 LogPath에 설정한 디렉터리에 로그 파일이 만들어집니다.

탐색기에서 디렉터리로 이동하면 Default, NativeImage 두 개의 하위 디렉터리가 만들어져 있습니다.

그리고, 각 디렉터리에 실행된 어셈블리 이름 디렉터리가 존재하고, HTML 파일로 내용이 저장되어져 있습니다.

HTML파일을 확인하여 실패 내용을 추적할 수 있습니다.

어셈블리 바인딩 로깅 활성화 응용 프로그램

bbonkr: activate-assembly-binding-error-log

Release 1.0.0.0

프로젝트를 빌드하기 위해서는 아래 요구사항을 만족해야 합니다.

  • Visual Studio 2015
  • .NET Framework 4.5.2

Release 파일을 다운로드 받고 실행하면 아래와 같이 간단한 모양으로 실행됩니다.

이 슬라이드 쇼에는 JavaScript가 필요합니다.

Check 버튼으로 현재 상태를 확인할 수 있고, Activate, Deactivate 버튼으로 활성, 비활성으로 상태를 변경할 수 있습니다.

활성은 레지스트리에 값을 추가하고, 비활성은 레지스트리 값을 제거합니다.