Comment activer la journalisation des échecs de liaison d'assembly (Fusion) dans .NET?
fuslogvw.exe
en tant qu'administrateur pour éviter tout problème de droits.
Comment activer la journalisation des échecs de liaison d'assembly (Fusion) dans .NET?
fuslogvw.exe
en tant qu'administrateur pour éviter tout problème de droits.
Réponses:
Ajoutez les valeurs suivantes à
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion Ajouter: DWORD ForceLog définit la valeur sur 1 DWORD LogFailures définit la valeur sur 1 DWORD LogResourceBinds définit la valeur sur 1 DWORD EnableLog définit la valeur sur 1 String LogPath définit la valeur du dossier pour les journaux (par exemple C: \ FusionLog \)
Assurez-vous d' inclure la barre oblique inverse après le nom du dossier et que le dossier existe .
Vous devez redémarrer le programme que vous exécutez pour le forcer à lire ces paramètres de registre.
Au fait, n'oubliez pas de désactiver la journalisation de fusion lorsque vous n'en avez pas besoin.
J'utilise généralement Fusion Log Viewer ( Fuslogvw.exe à partir d'une invite de commande Visual Studio ou Fusion Log Viewer dans le menu Démarrer) - ma configuration standard est la suivante:
c:\FusionLogs
( Important: assurez-vous que vous avez bien créé ce dossier dans le système de fichiers.)N'oubliez pas de fermer la session une fois que vous avez terminé!
(Je viens de poster ceci sur une question similaire - je pense que c'est pertinent ici aussi.)
fuslogvw
non seulement en tant qu'administrateur, mais également à partir du chemin Windows SDK correct que le projet Visual Studio lançant l'exception utilise. Vérifiez son csproj et recherchez SDK dans (mon nœud sdk est nommé TargetFrameworkSDKToolsDirectory
). L'utilisation d'une version de fuslogvw non correspondante ne semble pas intercepter les exceptions (ce qui est logique ...)
Si le SDK Windows est installé sur votre machine, vous trouverez le "Fusion Log Viewer" sous Microsoft SDK \ Tools (tapez simplement "Fusion" dans le menu Démarrer sur Vista ou Windows 7/8). Lancez-le, cliquez sur le bouton Paramètres et sélectionnez "Échec de la liaison de journal" ou "Enregistrer toutes les liaisons".
Si ces boutons sont désactivés, revenez au menu Démarrer, cliquez avec le bouton droit sur la visionneuse de journaux et sélectionnez «Exécuter en tant qu'administrateur».
Définissez la valeur de registre suivante:
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion! EnableLog] (DWORD) à 1
Pour désactiver, définissez sur 0 ou supprimez la valeur.
[modifier]: Enregistrez le texte suivant dans un fichier, par exemple FusionEnableLog.reg, au format de l'éditeur de registre Windows:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
"EnableLog"=dword:00000001
Exécutez ensuite le fichier à partir de l'explorateur Windows et ignorez l'avertissement concernant les dommages possibles.
Vous pouvez exécuter ce script Powershell en tant qu'administrateur pour activer 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
et celui-ci pour désactiver:
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
Le script du changeur Fusion Log Settings Viewer n'est pas le meilleur moyen de le faire.
Dans ASP.NET , il a parfois été difficile de faire en sorte que cela fonctionne correctement. Ce script fonctionne très bien et figurait également sur la liste des outils électriques de Scott Hanselman . Je l'ai personnellement utilisé pendant des années et ça ne m'a jamais déçu.
Au lieu d'utiliser un fichier journal laid, vous pouvez également activer le journal Fusion via ETW / xperf en activant le fournisseur privé DotnetRuntime ( Microsoft-Windows-DotNETRuntimePrivate
) avec GUID 763FD754-7086-4DFE-95EB-C01A46FAF4CA
et le FusionKeyword
mot clé (0x4).
@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
Lorsque vous ouvrez maintenant le fichier ETL dans PerfView et regardez sous le tableau des événements, vous pouvez trouver les données Fusion:
J'ai écrit une visionneuse de journaux de liaison d'assemblage nommée Fusion ++ et l' ai mise sur GitHub .
Vous pouvez obtenir la dernière version d' ici ou via chocolatey ( choco install fusionplusplus
).
J'espère que vous et certains des visiteurs ici pourrez économiser quelques minutes à vie avec.
Si la journalisation est déjà activée et que vous obtenez toujours cette erreur sur Windows 7 64 bits, essayez ceci dans IIS 7.5:
Créer un nouveau pool d'applications
Accédez aux paramètres avancés de ce pool d'applications
Définissez l' option Activer l'application 32 bits sur True
Pointez votre application Web pour utiliser ce nouveau pool
Juste un tout petit peu d'informations qui pourraient aider les autres; si vous faites quelque chose dans le sens de rechercher dans tous les assemblys d'un répertoire des classes qui héritent / implémentent des classes / interfaces, assurez-vous de nettoyer les assemblages périmés si vous obtenez cette erreur se rapportant à l'un de vos propres assemblys.
Le scénario serait quelque chose comme:
En bref: A --- charges -> B (périmé) --- références ---> C
Si cela se produit, le seul signe révélateur est l'espace de noms et le nom de classe dans le message d'erreur. Examinez-le attentivement. Si vous ne le trouvez nulle part dans votre solution, vous essayez probablement de charger un assemblage périmé.
Pour ceux qui sont un peu paresseux, je recommande de l'exécuter en tant que fichier bat pour chaque fois que vous souhaitez l'activer:
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
Juste au cas où vous vous posez la question sur l'emplacement de FusionLog.exe - Vous savez que vous l'avez, mais vous ne le trouvez pas? Je cherchais FUSLOVW ces dernières années encore et encore. Après le passage à .NET 4.5, le nombre de versions de FUSION LOG a explosé. Ce sont des endroits où il peut être trouvé sur votre disque, selon le logiciel que vous avez installé:
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 Tools \ x64
Outils C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0
Outils C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1
C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin