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


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


714
2017-11-01 08:58


origine


Réponses:


Ajoutez les valeurs suivantes à

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Fusion
Ajouter:
DWORD ForceLog définir la valeur à 1
DWORD LogFailures définit la valeur sur 1
DWORD LogResourceBinds définit la valeur sur 1
DWORD EnableLog définir la valeur sur 1
Chaîne LogPath définit la valeur du dossier pour les journaux (par exemple C: \ FusionLog \)

Assurez-vous inclure le backslash après le nom du dossier et que le 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 notation de fusion hors de la nécessité.


756
2017-10-06 18:23



J'utilise habituellement le Fusion Log Viewer (Fuslogvw.exe à partir d'une invite de commande Visual Studio ou Fusion Log Viewer à partir du menu Démarrer) - mon installation standard est:

  • Open Fusion Log Viewer en tant qu'administrateur
  • Cliquez sur paramètres
  • Vérifier la Activer le chemin d'accès du journal personnalisé checkbox
  • Entrez l'emplacement où vous voulez que les journaux soient écrits, par exemple, c:\FusionLogs (Important: assurez-vous que vous avez créé ce dossier dans le système de fichiers.)
  • Assurez-vous que le bon niveau de journalisation est activé (parfois, je sélectionne Consigner tous les liens sur le disque juste pour s'assurer que les choses fonctionnent bien)
  • Cliquez sur D'accord
  • Définir l'option d'emplacement du journal sur Douane

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


213
2017-07-15 14:49



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, puis sélectionnez "Échec de la connexion" ou "Consigner tous les liens".

Si ces boutons sont désactivés, revenez au menu Démarrer, cliquez avec le bouton droit sur Log Viewer et sélectionnez «Exécuter en tant qu'administrateur».


180
2018-05-19 08:26



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.

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

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 ignorer l'avertissement sur les dommages possibles.


82
2017-11-01 09:00



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

57
2017-10-08 10:26



le Fusion Log Settings Script du changeur de visionneuse Il n'y a pas de 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 a été listé sur La liste des outils électriques de Scott Hanselman ainsi que. Je l'ai personnellement utilisé pendant des années et il ne m'a jamais laissé tomber.


17
2017-10-21 05:37



Au lieu d'utiliser un fichier journal moche, vous pouvez également activer le journal Fusion via ETW / xperf en activant le fournisseur DotnetRuntime Private (Microsoft-Windows-DotNETRuntimePrivate) avec GUID 763FD754-7086-4DFE-95EB-C01A46FAF4CA et le FusionKeyword mot-clé (0x4) activé.

@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 la table Events, vous pouvez trouver les données Fusion:

Fusion events in PerfView


8
2018-03-31 17:22



Juste un tout petit peu d'information qui pourrait aider les autres; Si vous faites quelque chose comme rechercher tous les assemblys dans un répertoire pour des classes qui héritent / implémentent des classes / interfaces, alors assurez-vous de nettoyer les assemblies périmées si vous obtenez cette erreur concernant un de vos propres assemblys.

Le scénario serait quelque chose comme:

  1. Assembly A charge tous les assemblages dans un dossier
  2. L'assemblage B dans ce dossier est périmé, mais référence l'assemblage C
  3. L'assembly C existe, mais les espaces de noms, les noms de classes ou d'autres détails peuvent avoir changé depuis que l'assembly B est devenu obsolète (dans mon cas, un espace de noms a été modifié via un processus de refactoring)

En résumé: A --- charges -> B (périmé) --- références ---> C

Si cela se produit, le seul signe telltale est l'espace de nom et le nom de classe dans le message d'erreur. Examiner de près. Si vous ne le trouvez nulle part dans votre solution, vous essayez probablement de charger un assemblage obsolète.


3
2017-07-18 15:03



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. Met le Activer l'application 32 bits à Vrai

  4. Pointez votre application Web pour utiliser cette nouvelle piscine


2
2018-04-17 23:50