.NET에서 어셈블리 바인드 실패 로깅 (Fusion)을 어떻게 활성화합니까?
fuslogvw.exe
권한 문제를 피하기 위해 관리자 권한으로 실행하십시오 .
.NET에서 어셈블리 바인드 실패 로깅 (Fusion)을 어떻게 활성화합니까?
fuslogvw.exe
권한 문제를 피하기 위해 관리자 권한으로 실행하십시오 .
답변:
다음 값을 추가하십시오
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion 더하다: DWORD ForceLog 설정 값을 1 DWORD LogFailures 설정 값을 1 DWORD LogResourceBinds 값을 1로 설정 DWORD EnableLog 설정 값을 1로 설정 문자열 LogPath 설정 값을 로그 폴더 (예 : C : \ FusionLog \)
폴더 이름 뒤에 백 슬래시 를 포함 하고 폴더가 있는지 확인하십시오 .
해당 레지스트리 설정을 읽도록 실행중인 프로그램을 다시 시작해야합니다.
그건 그렇고, 필요하지 않은 경우 퓨전 로깅을 해제하는 것을 잊지 마십시오.
나는 보통 퓨전 로그 뷰어 사용 ( Fuslogvw.exe를 A로부터 의 Visual Studio 명령 프롬프트 시작 메뉴에서 또는 퓨전 로그 뷰어) - 내 표준 설정은 다음과 같습니다
c:\FusionLogs
( 중요 : 파일 시스템에서이 폴더를 실제로 작성했는지 확인하십시오).완료되면 로그 오프를 해제하십시오!
(방금 비슷한 질문에 이것을 게시했습니다. 여기도 관련이 있다고 생각합니다.)
fuslogvw
관리자뿐만 아니라 Visual Studio 프로젝트에서 예외를 발생 시키는 올바른 Windows SDK 경로 에서 실행 중인지 확인하십시오 . csproj를 확인하고 SDK 내에서 SDK를 검색하십시오 TargetFrameworkSDKToolsDirectory
. 비 일치 fuslogvw 버전을 사용하면 (이 말이 ...) 예외를 잡을 것 같다
컴퓨터에 Windows SDK가 설치되어 있으면 Microsoft SDK \ Tools 아래에 "Fusion Log Viewer"가 있습니다 (Vista 또는 Windows 7/8의 시작 메뉴에 "Fusion"을 입력하면됩니다). 시작하고 설정 버튼을 클릭 한 다음 "바인드 실패 로그"또는 "모든 바인드 로그"를 선택하십시오.
이 버튼이 비활성화되어 있으면 시작 메뉴로 돌아가서 로그 뷰어를 마우스 오른쪽 단추로 클릭 한 다음 "관리자 권한으로 실행"을 선택하십시오.
다음 레지스트리 값을 설정하십시오.
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion! EnableLog] (DWORD)를 1로
비활성화하려면 0으로 설정하거나 값을 삭제하십시오.
[edit] : 다음 텍스트를 Windows 레지스트리 편집기 형식의 파일 (예 : FusionEnableLog.reg)에 저장하십시오.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
"EnableLog"=dword:00000001
그런 다음 Windows 탐색기에서 파일을 실행하고 가능한 손상에 대한 경고를 무시하십시오.
이 Powershell 스크립트를 관리자 권한으로 실행하여 FL을 활성화 할 수 있습니다.
Set-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name ForceLog -Value 1 -Type DWord
Set-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogFailures -Value 1 -Type DWord
Set-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogResourceBinds -Value 1 -Type DWord
Set-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogPath -Value 'C:\FusionLog\' -Type String
mkdir C:\FusionLog -Force
이 기능을 비활성화하려면 :
Remove-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name ForceLog
Remove-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogFailures
Remove-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogResourceBinds
Remove-ItemProperty -Path HKLM:\Software\Microsoft\Fusion -Name LogPath
퓨전 로그 설정 뷰어 체인저 스크립트는 것도이 할 수있는 최선의 방법을 바 없다.
ASP.NET 에서는 올바르게 작동하기가 까다로 웠습니다. 이 스크립트는 훌륭하게 작동하며 Scott Hanselman의 Power Tool 목록 에도 포함되어 있습니다. 나는 수년간 개인적으로 사용해 왔으며 결코 실망시키지 않았습니다.
추악한 로그 파일을 사용하는 대신 GUID 와 키워드 (0x4)를 사용 하여 DotnetRuntime Private 공급자 ( )를 켜서 ETW / xperf 를 통해 Fusion 로그를 활성화 할 수도 있습니다 .Microsoft-Windows-DotNETRuntimePrivate
763FD754-7086-4DFE-95EB-C01A46FAF4CA
FusionKeyword
@echo off
echo Press a key when ready to start...
pause
echo .
echo ...Capturing...
echo .
"C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -on PROC_THREAD+LOADER+PROFILE -stackwalk Profile -buffersize 1024 -MaxFile 2048 -FileMode Circular -f Kernel.etl
"C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -start ClrSession -on Microsoft-Windows-DotNETRuntime:0x8118:0x5:'stack'+763FD754-7086-4DFE-95EB-C01A46FAF4CA:0x4:0x5 -f clr.etl -buffersize 1024
echo Press a key when you want to stop...
pause
pause
echo .
echo ...Stopping...
echo .
"C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -start ClrRundownSession -on Microsoft-Windows-DotNETRuntime:0x8118:0x5:'stack'+Microsoft-Windows-DotNETRuntimeRundown:0x118:0x5:'stack' -f clr_DCend.etl -buffersize 1024
timeout /t 15
set XPERF_CreateNGenPdbs=1
"C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -stop ClrSession ClrRundownSession
"C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -stop
"C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\xperf.exe" -merge kernel.etl clr.etl clr_DCend.etl Result.etl -compress
del kernel.etl
del clr.etl
del clr_DCend.etl
이제 PerfView 에서 ETL 파일을 열고 Events 테이블을 보면 Fusion 데이터를 찾을 수 있습니다.
Fusion ++ 이라는 어셈블리 바인딩 로그 뷰어를 작성하여 GitHub에 넣었습니다 .
최신 릴리스는 여기에서 또는 초콜릿 ( choco install fusionplusplus
)을 통해 얻을 수 있습니다 .
나는 당신과 여기에 일부 방문자가 그것으로 가치있는 일생 분을 절약 할 수 있기를 바랍니다.
이미 로깅을 사용하도록 설정했지만 Windows 7 64 비트에서이 오류가 계속 발생하면 IIS 7.5에서이를 시도하십시오.
새로운 응용 프로그램 풀 만들기
이 응용 프로그램 풀의 고급 설정으로 이동
설정 32 비트 응용 프로그램 사용 에 대한 사실을
이 새로운 풀을 사용하도록 웹 응용 프로그램을 가리 킵니다.
다른 사람들을 도울 수있는 작은 정보입니다. 클래스 / 인터페이스를 상속 / 구현하는 클래스에 대해 일부 디렉토리의 모든 어셈블리를 검색하는 행을 따라 무언가를 수행하는 경우 자체 어셈블리 중 하나와 관련된 오류가 발생하면 오래된 어셈블리를 정리하십시오.
시나리오는 다음과 같습니다.
한마디로 : A ---로드-> B (스테일) --- 참조 ---> C
이런 일이 발생하면 오류 메시지의 유일한 네임 스페이스와 클래스 이름이 나타납니다. 자세히 조사하십시오. 솔루션의 어느 곳에서나 찾을 수 없으면 오래된 어셈블리를로드하려고합니다.
약간 게으른 사람들을 위해 이것을 활성화하고 싶을 때마다 박쥐 파일로 실행하는 것이 좋습니다.
reg add "HKLM\Software\Microsoft\Fusion" /v EnableLog /t REG_DWORD /d 1 /f
reg add "HKLM\Software\Microsoft\Fusion" /v ForceLog /t REG_DWORD /d 1 /f
reg add "HKLM\Software\Microsoft\Fusion" /v LogFailures /t REG_DWORD /d 1 /f
reg add "HKLM\Software\Microsoft\Fusion" /v LogResourceBinds /t REG_DWORD /d 1 /f
reg add "HKLM\Software\Microsoft\Fusion" /v LogPath /t REG_SZ /d C:\FusionLog\
if not exist "C:\FusionLog\" mkdir C:\FusionLog
FusionLog.exe의 위치가 궁금한 경우를 대비하여 알고 있습니다. 찾을 수 없습니까? 나는 지난 몇 년 동안 계속해서 FUSLOVW를 찾고있었습니다. FUSION LOG .NET 4.5 버전으로 이동 한 후 폭발했습니다. 그녀는 설치 한 소프트웨어에 따라 디스크에서 찾을 수있는 위치입니다.
C : \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 도구 \ x64
C : \ 프로그램 파일 (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ x64
C : \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 도구 \ x64
C : \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 도구
C : \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 도구
C : \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin