.NET'te derleme bağlama hatası günlüğü (Fusion) nasıl etkinleştirilir


818

.NET'te derleme bağlama hatası günlüğünü (Fusion) nasıl etkinleştiririm?


46
Birisi umursarsa, füzyon günlüğü (fuslogvw.exe) kullanmak için bu makaleyi okuyun: msdn.microsoft.com/en-us/library/e74a18c4(v=VS.100).aspx size nereden indireceğinizi ve diğer bilgileri söyler.

13
@Will - paylaştığınız için teşekkürler! Bonus olarak - fuslogvw.exeherhangi bir hak sorununu önlemek için yönetici olarak çalıştığınızdan emin olun .
SliverNinja - MSFT

13
@ Fuslogvw kurmanın "en iyi" cevap olduğuna katılmayacağım. Windows SDK'nın tamamını bir geliştirme ortamı olmayan bir şeye yüklemeye gerek kalmadan sadece aracı alabilseydiniz, bir noktaya sahip olursunuz.
Coxy

2
@ Kesinlikle, ama bağlantı verdiğiniz cevap bunların hiçbirini kapsamaz.
Coxy

8
@ Lütfen bu konuda çocukça davranmayın. Yararlı olsa da, topluluğun diğerlerinden daha az yardımcı olduğuna karar veren ve pratik olarak aynı olan diğerini pratik olarak aynı olan bir yanıtı destekleyerek temsilci toplamaya çalışan kişisiniz.
Coxy

Yanıtlar:


868

Aşağıdaki değerleri

HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Fusion
Ekle:
DWORD ForceLog değeri 1 olarak ayarlandı
DWORD LogFailures değeri 1 olarak ayarlar
DWORD LogResourceBinds ayar değerini 1 olarak ayarlar
DWORD EnableLog ayar değeri 1
Dize LogPath değerini günlükler klasörüne ayarlar (örn. C: \ FusionLog \)

Klasör adından sonra ters eğik çizgi eklediğinizden ve Klasörün var olduğundan emin olun .

Bu kayıt defteri ayarlarını okumaya zorlamak için çalıştırdığınız programı yeniden başlatmanız gerekir.

Bu arada, ihtiyaç olmadığında füzyon günlüğünü kapatmayı unutmayın.

resim açıklamasını buraya girin


23
IIS'yi sıfırlayarak takip etmem gerekse de Gary'nin çözümleri benim için çalıştı. Not Bunu, SDK'leri ve benzerini yüklemek istemediğim temiz bir ortamda yapılandırdım.
Michhes

5
Bazıları tarafından kayıt defteri değişikliğinin hemen alınmadığı bildirildi. Fusion log günlüğünü açıp yeniden başlatmayı denediniz mi?
Gary Kindel

54
Bu kayıt defteri ayarlarını okumak için çalıştırdığınız programı yeniden başlatmanız gerekir
Orion Edwards

50
Fusion Log Viewer tüm bunları sizin için yapar. Başlat -> Programlar -> Visual Studio xxxx> Visual Studio Araçları> Visual Studio Komut İstemi'ne (yönetici olarak çalıştır) gidin ve "fuslogvw" yazın. Ayarlar'da günlüğe kaydetmeyi ayarlarsınız.
r3mark

10
Günlük kaydını kullanışlı bir şekilde açmak / kapatmak için Gary Kindel'in cevabına dayanan .reg dosyaları oluşturdum: etkinleştirme ve devre dışı bırakma .
Igor Kustov

271

Genellikle Fusion Log Viewer'ı ( bir Visual Studio komut isteminden Fuslogvw.exe veya başlat menüsünden Fusion Log Viewer) kullanıyorum - standart kurulumum:

  • Fusion Log Viewer'ı yönetici olarak açın
  • Tıklama ayarları
  • Kontrol Enable özel günlük yolu onay kutusunu
  • Günlüklerin yazılmasını istediğiniz konumu girin, örneğin, c:\FusionLogs( Önemli: Bu klasörü dosya sisteminde gerçekten oluşturduğunuzdan emin olun.)
  • Doğru günlük kaydı düzeyinin açık olduğundan emin olun (Bazen tüm şeylerin düzgün çalıştığından emin olmak için Tüm bağları diske kaydet'i seçiyorum )
  • tıklayın Tamam
  • Günlük konumu seçeneğini Özel olarak ayarlayın

İşiniz bittiğinde oturumu kapatmayı unutmayın!

(Bunu da benzer bir soruya gönderdim - sanırım burada da geçerli.)


4
Yerel bir uygulamadan çalışma zamanını kendiniz barındırıyorsanız, bazı nedenlerden dolayı özel bir günlük yolu kullanmanız gerekeceğini, aksi takdirde günlüğe hiçbir şey alamayacağınızı unutmayın.
jpierson

En azından benim durumumda, özel günlük yollarını ayarlamak zorunda değildim. Tüm yapmam gereken oturum açmaktı, örneğin, ayarlar iletişim kutusundaki "Diske tüm bağlamaları günlüğe kaydet".
Josh

42
Benim durumumda Yönetici olarak çalıştır gerekli, aksi takdirde tüm seçenekler devre dışı bırakıldı.
vezenkov

2
Not: klasörü Yönetici olarak oluşturun!
Tabrock

6
Visual Studio projesinin istisnayı kullandığı fuslogvwyalnızca yönetici olarak değil aynı zamanda doğru Windows SDK yolundan da çalıştırdığınızdan emin olun . Csproj'unu kontrol edin ve içinde SDK arayın (sdk düğümüm adlandırılır TargetFrameworkSDKToolsDirectory). Eşleşmeyen bir fuslogvw sürümü kullanmak istisnaları yakalamıyor gibi görünüyor (ki bu mantıklı ...)
Veverke

191

Makinenize Windows SDK yüklüyse, Microsoft SDK \ Tools altında "Fusion Log Viewer" ı bulacaksınız (Vista veya Windows 7/8'deki başlat menüsünde "Fusion" yazmanız yeterlidir). Başlatın, Ayarlar düğmesini tıklayın ve "Günlük bağlama hatası" veya "Tüm ciltleri kaydet" i seçin.

Bu düğmeler devre dışı bırakılırsa, başlangıç ​​menüsüne geri dönün, Günlük Görüntüleyicisi'ni sağ tıklatın ve "Yönetici Olarak Çalıştır" ı seçin.


6
Bu düğmeler benim için devre dışı - neden?
Tim Lovell-Smith

14
@Tim, daha önce görmedi - Yönetici ayrıcalıklarıyla ilgili olabilir mi? Sonuçta değiştirilen HKEY_LOCAL_MACHINE.
Samuel Jack

2
"Ayarlar, Günlük bağlama hataları" sorunumu bulmak için yeterliydi.
pauloya

1
Klasörün yazma erişimine izin verdiğinden emin olun. UAC ve c: \ logs füzyon günlüğü ile iyi oynamıyor
Edward Wilde

4
Notlar gibi, düğmeler devre dışı bırakılmışsa, füzyon günlüğü görüntüleyicisini yönetici ayrıcalıklarıyla yeniden çalıştırın.
Bruno Lopes

86

Aşağıdaki kayıt defteri değerini ayarlayın:

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion! EnableLog] (DWORD) 1'e

Devre dışı bırakmak için 0'a ayarlayın veya değeri silin.

[değiştir]: Aşağıdaki metni Windows Kayıt Defteri Düzenleyicisi Biçiminde bir dosyaya kaydedin, örneğin FusionEnableLog.reg:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
"EnableLog"=dword:00000001

Sonra dosyayı Windows Gezgini'nden çalıştırın ve olası hasar hakkında uyarıyı yok sayın.


4
Giriş büyük olasılıkla var olmayacak - onu oluşturmanız gerekecek. En azından, bu sabah çarpışmadan hemen önce bu soruya cevap vermek üzereyken yaptım :)
Jon Skeet

3
Ne yapar ! anlamına gelmek? Anahtar mı, değer mi? 64 bit sistemlere ne dersiniz?
Bruno Martinez

48
aslında, bu işe yarıyor ... sadece iisreset afterwords çalıştırmak için çalışması gerekir.
Nick DeMayo

4
@Norman: Bu özel ayar, Asp.Net hatalarının, günlükleri dosyaya kaydetmemek için hata sayfalarında derleme bağlama hata iletilerini göstermesini sağlamak için kullanıldığından. @OP: +1. Bir .reg dosyası içerecek şekilde düzenlendi. ! format, beni bu sayfaya cevap arayan hata mesajı dışında hiç görmediğim bir format.
Brian

2
IIS'yi sıfırlamanız gerekmez - yalnızca ilgili uygulama havuzu. Ya da en azından tek yapmam gereken buydu.
Kenny Evitt

81

FL'yi etkinleştirmek için bu Powershell betiğini yönetici olarak çalıştırabilirsiniz:

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

ve bunu devre dışı bırakmak için:

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

4
Teşekkürler! Komutlarınızı bu konuya sokmam için kendime izin verdim . Ve c:\FusionLogdir yaratma ekledim böylece insanlar bunu unutma ;-)
Oliver

Komut satırı kuralları! Şimdiye kadar "kes ve yapıştır" adı verilen en iyi icat edilmiş kod yeniden kullanılabilirlik teknolojisini kullanarak bunu hızlı bir şekilde tekrarlayabilirim. Teşekkürler.
Remigijus Pankevičius

20

Füzyon Günlüğü Ayarları Görüntüleyici değiştirici komut hiçbiri bu yapmanın en iyi yolu bar olduğunu.

In ASP.NET kez doğru çalışması için bu almak için en, bu zor olmuştur. Bu komut dosyası harika çalışıyor ve Scott Hanselman'ın Güç Aracı listesinde de yer aldı. Şahsen yıllarca kullandım ve asla beni hayal kırıklığına uğratmadı.


ps çalışmadığından emin olun sonra devre dışı veya bu klasör oldukça büyük alabilir
Adam Tuliper - MSFT

Bu yüzden ETW'yi veriyi çirkin büyük bir günlük dosyasında her zaman değil, sadece gerçekten ihtiyacım olduğunda günlüğe kaydetmek için kullanıyorum.
magicandre1981

13

Çirkin bir günlük dosyası kullanmak yerine, GUID ile DotnetRuntime Private sağlayıcısını ( ) ve (0x4) anahtar sözcüğünü açarak Fusion günlüğünü ETW / xperf üzerinden de etkinleştirebilirsiniz .Microsoft-Windows-DotNETRuntimePrivate763FD754-7086-4DFE-95EB-C01A46FAF4CAFusionKeyword

@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

Şimdi ETL dosyasını PerfView'de açıp Etkinlikler tablosunun altına baktığınızda, Fusion verilerini bulabilirsiniz:

PerfView'de füzyon olayları


@YuriBondarchuk bu istek üzerine etkinleştirir ve ETL daha fazla veri (diğer işlemler, dosya dönüştürme verileri) böylece dosyaları t diğer kullanıcılara verebilir ve normal füzyon günlüğü ile karşılaştırıldığında ÇOK daha fazla bilgi alabilirsiniz
magicandre1981

12

Fusion ++ adında bir derleme bağlayıcı günlük görüntüleyicisi yazdım ve GitHub'a koydum .

En son sürümü buradan veya chocolatey ( choco install fusionplusplus) aracılığıyla alabilirsiniz .

Umarım siz ve buradaki ziyaretçilerden bazıları ömür boyu dakikalar kazandırabilir.

Füzyon ++


1
Sevgili efendim, sen bir tanrınsın!
Sylvain Girard

1
Bu harika bir araç, çok teşekkür ederim!
simoneL

3

Günlüğe kaydetmeyi zaten etkinleştirdiyseniz ve hala Windows 7 64 bit'te bu hatayı alıyorsanız, IIS 7.5'te şunu deneyin:

  1. Yeni bir uygulama havuzu oluşturma

  2. Bu uygulama havuzunun Gelişmiş Ayarlar kısmına gidin

  3. Set 32-bit bir uygulama etkinleştirme için true

  4. Web uygulamanızı bu yeni havuzu kullanmaya yönlendirin


Adamım, sen benim günümü kurtardın, sorunu çözmek için yaklaşık 8 saat sürdüm. çok teşekkürler. :)
Dika Arta Karunia

3

Başkalarına yardımcı olabilecek küçük bir bilgi; sınıfları / arabirimleri devralan / uygulayan sınıflar için bazı dizindeki tüm derlemeleri arama çizgisi boyunca bir şey yaparsanız, kendi derlemelerinizden biriyle ilgili bu hatayı alırsanız eski derlemeleri temizlediğinizden emin olun.

Senaryo şöyle olacaktır:

  1. Assembly A, tüm derlemeleri bazı klasöre yükler
  2. Bu klasördeki B derlemesi eski, ancak C derlemesine başvuruyor
  3. Montaj C var, ancak ad alanları, sınıf adları veya başka bir ayrıntı, montaj B'nin eski haline gelmesinden bu yana geçen süre içinde değişmiş olabilir (benim durumumda bir yeniden düzenleme işlemiyle bir ad alanı değiştirildi)

Kısaca: A --- yükler -> B (eski) - referanslar ---> C

Bu durumda, tek küçük işaret hata mesajındaki ad alanı ve sınıf adıdır. Onu yakından inceleyin. Çözümünüzde hiçbir yerde bulamazsanız, muhtemelen eski bir montaj yüklemeye çalışıyorsunuzdur.


3

Biraz tembel olanlar için, bunu etkinleştirmek istediğinizde bir bat dosyası olarak çalıştırmanızı öneririz:

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

1

FusionLog.exe'nin yerini merak ediyorsanız - Sahip olduğunuzu biliyorsunuz, ancak bulamıyor musunuz? Son birkaç yılda tekrar tekrar FUSLOVW arıyordum. .NET 4.5'e taşındıktan sonra FUSION LOG sürümü sayısı patladı. Yüklediğiniz yazılıma bağlı olarak, diskinizde bulunabileceği yerlerdir:

C: \ Program Dosyaları (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Tools \ x64

C: \ Program Dosyaları (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ x64

C: \ Program Dosyaları (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Araçlar \ x64

C: \ Program Dosyaları (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Araçları

C: \ Program Dosyaları (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Araçlar

C: \ Program Dosyaları (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin


0

Benim durumumda küçük harfli disk adı yazılmasına yardımcı oldu

Yanlış - C: \ someFolder

Doğru - c: \ someFolder

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.