Bagaimana cara mengaktifkan logging kegagalan ikatan bind (Fusion) di .NET?
fuslogvw.exe
sebagai administrator untuk menghindari masalah hak.
Bagaimana cara mengaktifkan logging kegagalan ikatan bind (Fusion) di .NET?
fuslogvw.exe
sebagai administrator untuk menghindari masalah hak.
Jawaban:
Tambahkan nilai berikut ke
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion Menambahkan: DWORD ForceLog menetapkan nilai ke 1 DWORD LogFailures menetapkan nilai ke 1 DWORD LogResourceBinds menetapkan nilai ke 1 DWORD EnableLog menetapkan nilai ke 1 String LogPath menetapkan nilai ke folder untuk log (mis. C: \ FusionLog \)
Pastikan Anda menyertakan backslash setelah nama folder dan Folder itu ada .
Anda harus memulai kembali program yang sedang Anda jalankan untuk memaksanya membaca pengaturan registri tersebut.
Ngomong-ngomong, jangan lupa mematikan fusion logging saat tidak diperlukan.
Saya biasanya menggunakan Fusion Log Viewer ( Fuslogvw.exe dari prompt perintah Visual Studio atau Fusion Log Viewer dari menu mulai) - pengaturan standar saya adalah:
c:\FusionLogs
( Penting: pastikan Anda benar-benar membuat folder ini di sistem file.)Ingatlah untuk mematikan pencatatan setelah Anda selesai!
(Saya baru saja memposting ini pada pertanyaan serupa - saya pikir itu relevan di sini juga.)
fuslogvw
tidak hanya sebagai admin tetapi juga dari jalur Windows SDK yang benar proyek Visual Studio melempar pengecualian menggunakan. Periksa csprojnya dan cari SDK di dalamnya (node sdk saya bernama TargetFrameworkSDKToolsDirectory
). Menggunakan versi fuslogvw yang tidak cocok tampaknya tidak menangkap pengecualian (yang masuk akal ...)
Jika Anda menginstal Windows SDK di mesin Anda, Anda akan menemukan "Fusion Log Viewer" di bawah Microsoft SDK \ Tools (cukup ketik "Fusion" di menu mulai di Vista atau Windows 7/8). Luncurkan, klik tombol Pengaturan, dan pilih "Log bind failure" atau "Log all bind".
Jika tombol-tombol ini dinonaktifkan, kembali ke menu mulai, klik kanan Penampil Log, dan pilih "Jalankan sebagai Administrator".
Tetapkan nilai registri berikut:
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion! EnableLog] (DWORD) ke 1
Untuk menonaktifkan, atur ke 0 atau hapus nilainya.
[Sunting]: Simpan teks berikut ke file, misalnya FusionEnableLog.reg, dalam Format Editor Registri Windows:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
"EnableLog"=dword:00000001
Kemudian jalankan file dari windows explorer dan abaikan peringatan tentang kemungkinan kerusakan.
Anda dapat menjalankan skrip Powershell ini sebagai administrator untuk mengaktifkan 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
dan ini untuk menonaktifkan:
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
c:\FusionLog
dir agar orang tidak lupa bahwa ;-)
The Fusion Log Pengaturan Viewer changer naskah adalah bar tidak ada cara terbaik untuk melakukan hal ini.
Di ASP.NET , kadang-kadang sulit untuk membuatnya berfungsi dengan benar. Script ini berfungsi dengan baik dan terdaftar di daftar Power Tool Scott Hanselman juga. Saya pribadi menggunakannya selama bertahun-tahun dan tidak pernah mengecewakan saya.
Alih-alih menggunakan file log jelek, Anda juga dapat mengaktifkan log Fusion melalui ETW / xperf dengan mengaktifkan penyedia DotnetRuntime Private ( Microsoft-Windows-DotNETRuntimePrivate
) dengan GUID 763FD754-7086-4DFE-95EB-C01A46FAF4CA
dan FusionKeyword
kata kunci (0x4) aktif.
@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
Saat Anda sekarang membuka file ETL di PerfView dan melihat di bawah tabel Events, Anda dapat menemukan data Fusion:
Saya menulis sebuah penampil log yang mengikat perakitan bernama Fusion ++ dan meletakkannya di GitHub .
Anda bisa mendapatkan rilis terbaru dari sini atau melalui chocolatey ( choco install fusionplusplus
).
Saya harap Anda dan beberapa pengunjung di sini dapat menghemat beberapa menit seumur hidup yang layak dengannya.
Jika Anda telah mengaktifkan logging dan Anda masih mendapatkan kesalahan ini pada Windows 7 64 bit, coba ini di IIS 7.5:
Buat kumpulan aplikasi baru
Pergi ke Pengaturan Lanjut dari kumpulan aplikasi ini
Setel Aktifkan Aplikasi 32-Bit ke True
Arahkan aplikasi web Anda untuk menggunakan kumpulan baru ini
Hanya sedikit info yang dapat membantu orang lain; jika Anda melakukan sesuatu di sepanjang garis pencarian semua majelis di beberapa direktori untuk kelas yang mewarisi / mengimplementasikan kelas / antarmuka, maka pastikan Anda membersihkan majelis basi jika Anda mendapatkan kesalahan ini berkaitan dengan salah satu majelis Anda sendiri.
Skenario akan menjadi seperti:
Singkatnya: A --- memuat -> B (basi) --- referensi ---> C
Jika ini terjadi, satu-satunya tanda tanda adalah namespace dan classname dalam pesan kesalahan. Periksalah dengan cermat. Jika Anda tidak dapat menemukannya di mana pun dalam solusi Anda, Anda kemungkinan mencoba memuat rakitan basi.
Bagi mereka yang agak malas, saya sarankan menjalankan ini sebagai file bat kapan saja Anda ingin mengaktifkannya:
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
Kalau-kalau Anda bertanya-tanya tentang lokasi FusionLog.exe - Anda tahu Anda memilikinya, tetapi Anda tidak dapat menemukannya? Saya mencari FUSLOVW dalam beberapa tahun terakhir berulang kali. Setelah pindah ke .NET 4.5 jumlah versi FUSION LOG telah meledak. Ini adalah tempat di mana ia dapat ditemukan di disk Anda, tergantung pada perangkat lunak yang telah Anda instal:
C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Tools \ x64
C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ x64
C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Alat \ x64
C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Tools
C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Alat
C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin