web-dev-qa-db-fra.com

Comment activer la journalisation des échecs de liaison d'assemblage (Fusion) dans .NET

Comment activer la journalisation des échecs de liaison d'assemblage (Fusion) dans .NET?

748
user32736

Ajoutez les valeurs suivantes à

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion 
 Ajouter: 
 DWORD ForceLog a pour valeur 1 
 DWORD LogFailures a pour valeur 1 
 DWORD LogResourceBinds a pour valeur 1 
 DWORD EnableLog a pour valeur 1 
 String LogPath définit la valeur sur folder pour les journaux (par exemple, C:\FusionLog \) 

Assurez-vous que incluez 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.

BTW, n'oubliez pas de désactiver la journalisation par fusion lorsque vous n'en avez pas besoin. 

782
Gary Kindel

J'utilise généralement Fusion View Viewer ( Fuslogvw.exe à partir d'une invite de Visual Studio ou de Fusion Log Viewer à partir du menu Démarrer) - ma configuration standard est la suivante:

  • Ouvrez Fusion Log Viewer en tant qu'administrateur
  • Cliquez paramètres
  • Cochez la case Activer le chemin d'accès au journal personnalisé
  • Entrez l'emplacement où les journaux doivent être écrits, par exemple, c:\FusionLogs (Important: assurez-vous que vous avez bien créé ce dossier dans le système de fichiers.)
  • Assurez-vous que le bon niveau de journalisation est activé (parfois, je ne sélectionne que Consigner toutes les liaisons sur le disque uniquement pour vérifier que tout fonctionne correctement)
  • Cliquez OK
  • Définissez l'option d'emplacement du journal sur Personnalisé

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

238
Mike Goatly

Si le Kit de développement logiciel (SDK) Windows est installé sur votre ordinateur, vous trouverez le «Visualiseur de journaux Fusion» sous Microsoft SDK\Tools (tapez simplement «Fusion» dans le menu Démarrer de Vista ou Windows 7/8). Lancez-le, cliquez sur le bouton Paramètres, puis sélectionnez "Échec de la connexion d'un journal" ou "Enregistrer tous les liens".

Si ces boutons sont désactivés, retournez au menu Démarrer, cliquez avec le bouton droit de la souris sur Log Viewer, puis sélectionnez "Exécuter en tant qu'administrateur".

184
Samuel Jack

Définissez la valeur de registre suivante:

[HKEY_LOCAL_MACHINE\LOGICIEL\Microsoft\Fusion! EnableLog] (DWORD) sur 1

Pour désactiver, définissez sur 0 ou supprimez la valeur.

[edit]: Enregistrez le texte suivant dans un fichier, par exemple FusionEnableLog.reg, inWindows Format de l’éditeur de registre:

Windows Registry Editor Version 5.00

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

Ensuite, exécutez le fichier à partir de Windows Explorer et ignorez l’avertissement concernant les dommages éventuels.

82
user32736

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

Remarque: Assurez-vous que le répertoire fourni pour l'entrée LogPath existe. Si le répertoire n'existe pas, vos journaux ne seront pas récupérables.

et celui-ci à 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
62
Tereza Tomcova

Le script de changeur de visionneuse Fusion Log Settings Viewer n’est pas le meilleur moyen de le faire. 

Dans ASP.NET , il a parfois été difficile d’obtenir que cela fonctionne correctement. Ce script fonctionne très bien et figurait également sur la liste des outils électriques de Scott Hanselman . Personnellement, je l'utilise depuis des années et je ne me laisse jamais tomber.

19

Au lieu d'utiliser un fichier journal déplaisant, 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 mot clé FusionKeyword (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 que vous regardez sous le tableau des événements, vous pouvez trouver les données de Fusion:

 Fusion events in PerfView

10
magicandre1981

Juste une infime information qui pourrait aider les autres; Si vous effectuez quelque chose de similaire dans la recherche dans tous les assemblys de certains répertoires pour les classes qui héritent des classes/interfaces/implémentation, assurez-vous de nettoyer les assemblys périmés si vous obtenez cette erreur relative à l'un de vos propres assemblys.

Le scénario serait quelque chose comme:

  1. Assembly A charge tous les assemblys dans un dossier 
  2. L'assembly B de ce dossier est périmé, mais référence l'assembly C 
  3. L'Assemblée C existe, mais les espaces de noms, les noms de classe ou d'autres détails ont peut-être changé dans le temps qui s'est écoulé depuis que l'Assemblée B est devenue obsolète (dans mon cas, un espace de noms a été modifié au moyen d'un processus de refactoring).

En bref: A --- charges -> B (rassis) --- références ---> C

Si cela se produit, le seul signe révélateur est l'espace de noms et le nom de la classe dans le message d'erreur. Examinez-le de près. Si vous ne le trouvez nulle part dans votre solution, vous essayez probablement de charger un assembly obsolète.

3
andrerav

Si vous avez déjà activé la journalisation et que vous obtenez toujours cette erreur sur Windows 7 64 bits, essayez ceci dans IIS 7.5:

  1. Créer un nouveau pool d'applications

  2. Accédez aux paramètres avancés de ce pool d'applications.

  3. Définissez le Activer l'application 32 bits à True

  4. Indiquez à votre application Web d'utiliser ce nouveau pool

2
Adam Mendoza

Juste au cas où vous vous interrogeriez 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 numéro de version 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)\SDK Microsoft\Windows\v8.0A\bin\NETFX 4.0 Outils\x64 

C:\Program Files (x86)\SDK Microsoft\Windows\v7.0A\Bin\x64 

C:\Program Files (x86)\SDK Microsoft\Windows\v8.1A\bin\NETFX 4.5.1 Outils\x64 

C:\Program Files (x86)\SDK Microsoft\Outils\Windows\v8.0A\bin\NETFX 4.0 Outils 

C:\Program Files (x86)\Outils de développement SDK Microsoft\Windows\v8.1A\bin\NETFX 4.5.1 

C:\Program Files (x86)\SDK Microsoft\Windows\v7.0A\Bin

1
Dikshit Kathuria

Dans mon cas, j'ai aidé à saisir le nom du disque en minuscule

Wrong - C:\someFolder

correct - c:\unFichier

0
Vlad

Depuis que je Tweet about Fusion ++ a été retweeté par Scott Hanselman lui-même, je pense avoir assez de confiance pour vous en parler.

J'ai écrit un visualiseur de journal d'assemblage (améliorable) nommé Fusion ++ et je l'ai mis sur GitHub .

J'espère que vous et certains des visiteurs présents ici pourrez économiser quelques minutes de vie dignes de votre vie.

 Fusion++

0
Waescher

Pour ceux qui sont un peu paresseux, je vous recommande de l'exécuter en tant que fichier bat pour 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
0
Igor Meszaros