web-dev-qa-db-fra.com

Comment déboguer les erreurs d'exécution "Impossible de charger le fichier ou l'assembly"?

J'ai un projet qui utilise une bibliothèque Java convertie en utilisant IKVM . J'ai ajouté le DLL créé ainsi que toutes les DLL IKVM possibles en tant que références à mon projet, mais lorsque je l'exécute, l'erreur d'exécution suivante apparaît:

System.IO.FileNotFoundException: impossible de charger le fichier ou l'assembly, version = 0.0.0.0, Culture = neutre, PublicKeyToken = null 'ou l'une de ses dépendances. Le système ne peut pas trouver le fichier spécifié.

Je ne sais pas trop comment déboguer cette erreur. Y at-il un moyen de savoir exactement quel type est manquant? D'après la description, je suppose que c'est le DLL généré (à partir de la librairie Java), mais je l'ai correctement ajouté comme référence.

Qu'est-ce que j'ai mal fait?

26
Wookai

Vous pouvez utiliser Fusion Log Viewer pour déboguer les problèmes de chargement d’Assembly dans les applications .NET.

En outre, Process Monitor est très utile pour identifier les problèmes généraux de chargement de fichier.

21
Tim Barrass

Le simple fait de sonner dans cette dépendance et ce visualiseur de journaux de fusion ne fonctionne pas bien pour les applications qui ont un code natif et géré ensemble ou pour le chargement dynamique de code natif. Voici un bon article expliquant, étape par étape, comment résoudre les erreurs d'assemblage manquantes (ou non valides) à l'aide du moniteur de processus couvrant ces scénarios:

Debug Impossible de charger le fichier, l'assembly ou l'une de ses dépendances avec Process Monitor

Cet article comprend également un outil permettant d’automatiser une partie de cette tâche.

6
devshorts

Vous pouvez diagnostiquer cela en utilisant Fusion Log Viewer (disponible dans le Kit de développement logiciel (SDK) Microsoft). Lancez-le dans Administrator et activez le journal dans les paramètres.

Il enregistrera toutes les informations concernant le chargement de vos références (et toutes leurs références). Il vous indiquera explicitement quelle référence est manquante et où il l’a recherché.

MSDN sur Fusion Log Viewer

5
Nekresh

Il existe un programme appelé Dependency Walker qui vous permet de voir les dépendances d’un fichier PE donné (dll, exe, ocx ...).

Cette erreur est vraiment ennuyeuse, très difficile à déboguer. Vous devez vous assurer que votre dll est présente ainsi que TOUTES les dépendances que cette dll a . Ce point-clé est généralement l'endroit où le mal de tête se manifeste.

2
Eric

Avec ProcessMonitor (de la suite Sysinternals), vous pouvez voir quelle DLL votre processus recherche juste avant la levée de l'exception.

0
Liran

Le gestionnaire de dépendances résout statiquement toutes les DLL requises par un fichier PE natif et signale les dépendances manquantes, tandis que Fusion Log Viewer détecte les problèmes de liaison à l'Assemblée dans le code géré pendant l'exécution. Pour le code .Net géré qui charge les DLL natives de manière dynamique, ces outils ne suffisent pas.

Voici un article de blog sur la façon dont vous pouvez utiliser Process Monitor pour résoudre les problèmes «Impossible de charger le fichier ou l'assembly»: https://www.codeproject.com/Articles/560816/Troubleshooting-dependency-resolution-problems-usi

0
Mike S.