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

Comment puis-je activer la journalisation des échecs de bind assembly (Fusion) dans .NET?

727
demandé sur Peter Mortensen 2008-11-01 11:58:30

9 réponses

ajouter les valeurs suivantes à

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion
Add:
DWORD ForceLog set value to 1
DWORD LogFailures set value to 1
DWORD LogResourceBinds set value to 1
DWORD EnableLog set value to 1
String LogPath set value to folder for logs (e.g. C:\FusionLog\)

assurez-vous que vous incluez la barre oblique 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 d'éteindre la connexion fusion quand ce n'est pas nécessaire.

761
répondu Gary Kindel 2016-09-15 14:00:13

j'utilise habituellement le visualiseur de journal de Fusion ( Fuslogvw.exe à partir D'une invite de commande Visual Studio ou D'un lecteur de journal de Fusion à partir du menu Démarrer) - ma configuration standard est:

  • Ouvrir la Fusion Visionneuse du Journal en tant qu'administrateur
  • , Cliquez sur paramètres
  • cocher la Case Activer journal personnalisé chemin case à cocher
  • entrez l'endroit où vous voulez que les logs obtenez écrit, par exemple, c:\FusionLogs ( Important: assurez-vous que vous avez réellement créé ce dossier dans le système de fichiers.)
  • assurez-vous que le niveau de journalisation est sur (j'ai parfois, il suffit de sélectionner Journal de toutes les lie à disque juste pour s'assurer que les choses fonctionnent à droite)
  • , Cliquez sur OK
  • définit l'option de localisation du journal à personnalisé

N'oubliez pas de désactiver la connexion une fois que vous avez terminé!

(je viens de poster ceci sur une question similaire - je pense que c'est pertinent ici aussi.)

221
répondu Mike Goatly 2018-07-02 21:04:09

si vous avez le SDK Windows installé sur votre machine, vous trouverez le" Fusion Log Viewer "sous Microsoft SDK\Tools (il suffit de taper" Fusion " dans le menu Démarrer sur Vista ou Windows 7/8). Lancez-le, Cliquez sur le bouton Paramètres et sélectionnez "Log bind failure" ou "Log all binds".

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

182
répondu Samuel Jack 2013-05-02 09:41:54

définit la valeur de Registre suivante:

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

Pour désactiver, 0 ou supprimer la valeur.

[edit ]:pour Enregistrer le texte suivant dans un fichier électronique.g FusionEnableLog.reg, dans Éditeur De Registre De Windows Format:

Windows Registry Editor Version 5.00

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

exécutez alors le fichier de l'Explorateur de windows et ignorez l'avertissement au sujet des dommages possibles.

82
répondu user32736 2013-05-20 21:43:47

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

Note: S'assurer que le répertoire fourni pour L'entrée LogPath existe. Si le répertoire n'existe pas, alors vos journaux ne seront plus accessibles.

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
57
répondu Tereza Tomcova 2018-01-22 20:54:22

Le Fusion Journal des Paramètres de la Visionneuse de changeur de script est bar none la meilleure façon de le faire.

dans ASP.NET , il a parfois été difficile d'obtenir ce fonctionnement correctement. Ce script fonctionne très bien et a été répertorié sur liste D'outils de puissance de Scott Hanselman ainsi. Je l'ai personnellement utilisé pendant des années et il ne m'a jamais laissé tomber.

18
répondu Adam Tuliper - MSFT 2012-05-13 17:59:44

au lieu d'utiliser un fichier journal laid, vous pouvez également activer Fusion log 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) activé.

@echo off
echo Press a key when ready to start...
pause
echo .
echo ...Capturing...
echo .

"C:\Program Files (x86)\Windows Kits.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.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.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.1\Windows Performance Toolkit\xperf.exe" -stop ClrSession ClrRundownSession 
"C:\Program Files (x86)\Windows Kits.1\Windows Performance Toolkit\xperf.exe" -stop
"C:\Program Files (x86)\Windows Kits.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 la table événements, vous pouvez trouver les données de Fusion:

Fusion events in PerfView

9
répondu magicandre1981 2015-03-31 17:22:02

juste un petit peu d'information qui pourrait aider les autres; si vous faites quelque chose dans le sens de rechercher toutes les assemblées dans un répertoire pour les classes qui héritent/mettent en œuvre des classes/interfaces, alors assurez-vous de nettoyer les assemblées vétustes si vous obtenez cette erreur relative à l'une de vos propres assemblées.

Le scénario serait quelque chose comme:

  1. L'ensemble a charge tous les assemblages dans un même dossier
  2. Montage B dans ce dossier est périmé, mais références Assemblée C
  3. Assembly C existe, mais les namespaces, les noms de classe ou tout autre détail ont pu changer dans le temps qui s'est écoulé depuis que l'assembly B est devenue périmée (dans mon cas un namespace a été modifié par un processus de recadrage)

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

si cela se produit, le seul signe telltale est l'espace de noms et le nom de classe dans l'erreur message. Examinez-le attentivement. Si vous ne le trouvez nulle part dans votre solution, vous êtes susceptible d'essayer de charger un assemblage vicié.

3
répondu andrerav 2013-07-18 15:03:37

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

  1. " créer un nouveau pool d'applications

  2. Allez dans les Paramètres Avancés de ce pool d'applications

  3. définir le activer L'Application 32 bits à True

  4. Pointez votre application web pour utiliser ce nouveau pool

2
répondu Adam Mendoza 2012-05-13 18:01:04