.NET'te derleme bağlama hatası günlüğünü (Fusion) nasıl etkinleştiririm?
fuslogvw.exe
herhangi bir hak sorununu önlemek için yönetici olarak çalıştığınızdan emin olun .
.NET'te derleme bağlama hatası günlüğünü (Fusion) nasıl etkinleştiririm?
fuslogvw.exe
herhangi bir hak sorununu önlemek için yönetici olarak çalıştığınızdan emin olun .
Yanıtlar:
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.
Genellikle Fusion Log Viewer'ı ( bir Visual Studio komut isteminden Fuslogvw.exe veya başlat menüsünden Fusion Log Viewer) kullanıyorum - standart kurulumum:
c:\FusionLogs
( Önemli: Bu klasörü dosya sisteminde gerçekten oluşturduğunuzdan emin olun.)İşiniz bittiğinde oturumu kapatmayı unutmayın!
(Bunu da benzer bir soruya gönderdim - sanırım burada da geçerli.)
fuslogvw
yalnı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ı ...)
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.
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.
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
c:\FusionLog
dir yaratma ekledim böylece insanlar bunu unutma ;-)
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ı.
Ç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-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
Şimdi ETL dosyasını PerfView'de açıp Etkinlikler tablosunun altına baktığınızda, Fusion verilerini bulabilirsiniz:
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.
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:
Yeni bir uygulama havuzu oluşturma
Bu uygulama havuzunun Gelişmiş Ayarlar kısmına gidin
Set 32-bit bir uygulama etkinleştirme için true
Web uygulamanızı bu yeni havuzu kullanmaya yönlendirin
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:
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.
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
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