Cara mengaktifkan assembly bind failure logging (Fusion) di .NET

818

Bagaimana cara mengaktifkan logging kegagalan ikatan bind (Fusion) di .NET?

pengguna32736
sumber
46
Jika ada yang peduli, untuk menggunakan fusion logger (fuslogvw.exe) baca artikel ini: msdn.microsoft.com/en-us/library/e74a18c4(v=VS.100).aspx itu memberi tahu Anda di mana untuk mengunduhnya dan info lainnya.
13
@Will - terima kasih sudah berbagi! Sebagai bonus - pastikan Anda menjalankan fuslogvw.exesebagai administrator untuk menghindari masalah hak.
SliverNinja - MSFT
13
@Apakah saya tidak setuju bahwa menginstal fuslogvw adalah jawaban "terbaik". Jika Anda bisa mendapatkan hanya alat tanpa harus menginstal seluruh Windows SDK pada apa yang mungkin bukan lingkungan pengembangan maka Anda ada benarnya.
Coxy
2
@Will Tentu saja, tetapi jawaban yang Anda tautkan tidak mencakup semua itu.
Coxy
8
@ Akan tolong jangan terlalu kekanak-kanakan tentang hal itu. Kaulah yang mencoba mengumpulkan perwakilan dengan mempromosikan jawaban yang, meskipun bermanfaat, masyarakat telah dinilai kurang bermanfaat daripada yang lain, yang jauh lebih mudah dan yang lainnya praktis sama.
Coxy

Jawaban:

868

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.

masukkan deskripsi gambar di sini

Gary Kindel
sumber
23
Solusi Gary bekerja untuk saya walaupun saya juga harus mengikuti dengan mengatur ulang IIS. Catatan saya mengkonfigurasi ini di lingkungan yang bersih di mana saya tidak ingin menginstal SDK dan sejenisnya.
Michhes
5
Telah dilaporkan oleh beberapa orang bahwa perubahan registri tidak langsung dilakukan. Sudahkah Anda mencoba menyalakan Fusion logging lalu me-reboot?
Gary Kindel
54
Anda harus memulai kembali program apa pun yang sedang Anda jalankan agar dapat membaca pengaturan registri tersebut
Orion Edwards
50
The Fusion Log Viewer melakukan semua itu untuk Anda. Pergi ke Mulai -> Program -> Visual Studio xxxx> Alat Visual Studio> Visual Studio Command Prompt (jalankan sebagai admin) dan ketik "fuslogvw". Di Pengaturan Anda menyesuaikan logging.
r3mark
10
Untuk menghidupkan / mematikan logging berguna, saya telah membuat file .reg, yang didasarkan pada jawaban Gary Kindel: mengaktifkan dan menonaktifkan .
Igor Kustov
271

Saya biasanya menggunakan Fusion Log Viewer ( Fuslogvw.exe dari prompt perintah Visual Studio atau Fusion Log Viewer dari menu mulai) - pengaturan standar saya adalah:

  • Buka Fusion Log Viewer sebagai administrator
  • Klik pengaturan
  • Periksa Aktifkan kustom log path kotak centang
  • Masukkan lokasi yang Anda ingin log untuk menulis, misalnya, c:\FusionLogs( Penting: pastikan Anda benar-benar membuat folder ini di sistem file.)
  • Pastikan tingkat logging yang benar sudah aktif (Saya kadang-kadang cukup pilih Log semua bind ke disk hanya untuk memastikan semuanya bekerja dengan benar)
  • Klik OK
  • Atur opsi lokasi log ke Kustom

Ingatlah untuk mematikan pencatatan setelah Anda selesai!

(Saya baru saja memposting ini pada pertanyaan serupa - saya pikir itu relevan di sini juga.)

Mike Goatly
sumber
4
Perhatikan bahwa dalam kasus di mana Anda meng-hosting runtime sendiri dari aplikasi asli, Anda akan diminta untuk menggunakan jalur log khusus untuk beberapa alasan, jika tidak, Anda tidak akan mendapatkan apa pun yang dicatat.
jpierson
Setidaknya dalam situasi saya, saya sebenarnya tidak perlu mengatur jalur log kustom. Yang harus saya lakukan adalah menyalakan log on, misalnya, "Log semua mengikat ke disk" pada dialog pengaturan.
Josh
42
Jalankan sebagai Administrator diperlukan dalam kasus saya, jika tidak semua opsi dinonaktifkan.
vezenkov
2
Catatan: buat folder sebagai Admin!
Tabrock
6
Pastikan Anda menjalankan fuslogvwtidak 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 ...)
Veverke
191

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".

Samuel Jack
sumber
6
Tombol-tombol itu dinonaktifkan untuk saya - mengapa?
Tim Lovell-Smith
14
@Tim, tidak melihat itu sebelumnya - mungkinkah ada hubungannya dengan hak istimewa Admin? HKEY_LOCAL_MACHINE yang diubah setelah semua.
Samuel Jack
2
"Pengaturan, Gagal mengikat log" sudah cukup untuk menemukan masalah saya.
pauloya
1
Pastikan folder memungkinkan akses tulis. UAC dan c: \ log tidak bermain bagus dengan log fusi
Edward Wilde
4
Sama seperti catatan, jika tombol dinonaktifkan, jalankan kembali penampil log fusi dengan hak istimewa admin.
Bruno Lopes
86

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.

pengguna32736
sumber
4
Bukan berarti entri itu mungkin tidak ada - Anda harus membuatnya. Setidaknya, saya lakukan ketika saya akan menjawab pertanyaan ini sebelum kecelakaan pagi ini :)
Jon Skeet
3
Apa yang dilakukan! berarti? Kunci atau nilai? Bagaimana dengan sistem 64 bit?
Bruno Martinez
48
sebenarnya, ini berhasil ... Anda hanya perlu menjalankan kata kunci iisreset untuk membuatnya berfungsi.
Nick DeMayo
4
@Norman: Karena pengaturan khusus ini digunakan untuk membuat kesalahan Asp.Net menunjukkan pesan kesalahan rakitan yang mengikat di halaman kesalahan, bukan untuk menyimpan log ke file. @OP: +1. Diedit untuk memasukkan file .reg. Itu! format adalah salah satu yang belum pernah saya lihat, kecuali dalam pesan kesalahan yang mengirim saya ke halaman ini untuk mencari jawaban.
Brian
2
Anda tidak perlu mengatur ulang IIS - cukup kumpulan aplikasi yang relevan. Atau setidaknya itu yang perlu saya lakukan.
Kenny Evitt
81

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
Tereza Tomcova
sumber
4
Terima kasih! Saya telah mengizinkan diri saya untuk menempatkan perintah Anda ke intisari ini . Dan saya menambahkan pembuatan c:\FusionLogdir agar orang tidak lupa bahwa ;-)
Oliver
Aturan baris perintah! Saya dapat dengan cepat memutar ulang ini menggunakan teknologi reusability kode sejauh ini yang terbaik yang ditemukan yang disebut "cut and paste". Terima kasih.
Remigijus Pankevičius
20

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.

Adam Tuliper - MSFT
sumber
ps PASTIKAN Anda menonaktifkannya setelah menjalankan atau folder ini bisa menjadi cukup besar
Adam Tuliper - MSFT
inilah mengapa saya menggunakan ETW, untuk hanya mencatat data jika saya benar-benar membutuhkannya, tidak setiap saat dalam file log besar yang jelek.
magicandre1981
13

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-C01A46FAF4CAdan FusionKeywordkata 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:

Acara fusion di PerfView

magicandre1981
sumber
@YuriBondarchuk mengaktifkan ini sesuai permintaan dan Anda memiliki lebih banyak data di ETL (proses lain, data versi file) sehingga Anda dapat memberikan file t pengguna lain dan mereka bisa mendapatkan informasi JAUH lebih banyak dibandingkan dengan log fusi normal
magicandre1981
12

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.

Fusion ++

Waescher
sumber
1
Tuan yang terhormat, Anda adalah dewa!
Sylvain Girard
1
Itu alat yang luar biasa, terima kasih banyak!
simoneL
3

Jika Anda telah mengaktifkan logging dan Anda masih mendapatkan kesalahan ini pada Windows 7 64 bit, coba ini di IIS 7.5:

  1. Buat kumpulan aplikasi baru

  2. Pergi ke Pengaturan Lanjut dari kumpulan aplikasi ini

  3. Setel Aktifkan Aplikasi 32-Bit ke True

  4. Arahkan aplikasi web Anda untuk menggunakan kumpulan baru ini

Adam Mendoza
sumber
***, kau selamatkan hariku, aku butuh sekitar 8 jam untuk menyelesaikan masalah ini. terimakasih banyak. :)
Dika Arta Karunia
3

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:

  1. Majelis A memuat semua majelis dalam beberapa folder
  2. Majelis B di folder ini basi, tetapi merujuk perakitan C
  3. Majelis C ada, tetapi ruang nama, nama kelas, atau detail lainnya mungkin telah berubah dalam waktu yang telah berlalu sejak perakitan B menjadi basi (dalam kasus saya namespace diubah melalui proses refactoring)

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.

andrerav
sumber
3

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
Igor Meszaros
sumber
1

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

Dikshit Kathuria
sumber
0

Dalam kasus saya membantu ketik nama disk dalam huruf kecil

Salah - C: \ someFolder

Benar - c: \ someFolder

Vlad
sumber