Conseils pour aider à déboguer " ne pouvait pas charger le fichier ou l'assemblage X ou l'une de ses dépendances"
je suis à la recherche de conseils/suggestions/idées pour aider à déboguer un problème sur la charge de l'application; impossible de charger le fichier ou l'assembly...
la solution / projet dans lequel je fais l'expérience de ce problème est une conversion d'une copie de travail dans Visual Studio 2008 à la version Candidate de Visual Studio 2010. Le processus de conversion s'est avéré être un succès, et tous les projets de solution sont mis à Cadre 4.
l'exception concerne un tiers component (une bibliothèque de traitement de graphiques), mais n'importe quelles réponses pourraient éventuellement aider d'autres avec N'importe quelle DLL gênante.
ne pouvait pas charger le fichier ou l'assemblage 'Aurigma.GraphicsMill.DLL " ou une de ses dépendances. n'est pas une application Win32 valide. (Exception de HRESULT: 0x800700C1)
ce qui est déroutant à propos de cette exception est le texte supplémentaire: n'est pas une application Win32 valide.
la trace complète de la pile d'exceptions est sur PasteBin, mais ne semble pas faire beaucoup plus de lumière sur la question...
Ce que j'ai essayé jusqu'à présent sans succès:
- Simple à nettoyer, reconstruire, redémarrez combinaisons de Visual Studio 2010 RC.
- supprimer et ajouter de nouveau la DLL en question.
- Basculement "copie locale" pour de vrai et de faux dans le DLL en question.
- confirmer qu'après une "construction réussie" la DLL en question apparaît dans le bindebug dossier.
- vérification de toute référence inutile à la DLL en question (aucun trouvé).
- le fichier de licence associé à la DLL en question Est dans le même répertoire qu'elle.
Je n'ai pas non plus eu de chance avec le fait qu'il touche des points de rupture du débogueur sur la charge d'application.
7 réponses
j'ai trouvé que la cause de ce problème est que parce que vous êtes passé à .net v4, vous utilisez maintenant un nouveau pool d'applications dans IIS7 spécifiquement pour asp.net v4 (the pool itself is called 'ASP.NET v4.0')--1-->
dans la section Paramètres avancés de l'application pool, définissez 'Enable 32-bit Applications' à vrai et votre DLL de problème se chargera maintenant comme prévu.
Évidemment, vous devriez faire la même chose si votre application web a sa propre application piscine.
si vous utilisez Windows Server 2008 (pas R2) voir ce post sur la façon d'attribuer des permissions correctes pour l'identité de votre pool d'applications
j'ai eu une exception similaire quand mon projet exécutable a été défini à N'importe quel CPU et avait une référence à une dll compilée avec x86.
essayez de configurer votre exécutable sur x86 et voyez s'il fonctionne. Si ce n'est pas essayer fusion log pour obtenir plus de détails sur l'erreur.
Astuce
une avenue d'investigation que nous avons entreprise, qui a résolu une partie de nos problèmes mais pas le problème global était un mélange d'assemblages x86 (32 bits) et x64 (64 bits) se référençant l'un l'autre.
assurez-vous que vous ne pas ont des assemblages à 32 bits selon les assemblages à 64 bits.
ceci est causé parce que vous essayez de charger une dépendance binaire (l'un des fichiers de votre Bin
folder) c'est-à-dire 32 bits et votre application tourne en mode 64 bits.
dans .Net 4 et IIS 7, l'application met par défaut en mode 64 bits.
la plupart des binaires .Net sont compilés avec Any CPU
définit ses propriétés de construction. Cela signifie qu'ils fonctionnent en mode 32 et 64 bits.
Plus de C++ et de C applications écrites en .Net besoin d'être spécialement compilé pour 32 bits ou 64 bits. Cela signifie que si vous utilisez la mauvaise version bin déployée de votre dépendance, elle ne peut pas charger.
ceci peut être résolu en utilisant l'un des suivants:
si vous souhaitez conserver votre référence/dépendance 32bit:
- spécifiez que votre application IIS doit fonctionner en mode 32bit.
- En Gestion IIS;
- pool d'Applications -> Paramètres Avancés (sur le droit)
- "Activé, les applications 32 bits" à True.
- redémarrez votre pool d'applications
- installez vos deux assemblages (32bit et 64bit) dans le GAC. IIS chargera la version correcte en fonction de l'environnement d'exploitation (dans votre cas, il s'agit de la version 64 bits).
Si vous voulez juste pour le faire fonctionner:
- remplacer le binaire yout 32bit dans votre
Bin
dossier avec le 64 bits. Je ne vais pas avoir de problème pour le charger.
ce qui est bizarre, c'est que je faisais face au même problème, et j'ai mis 'false' dans les applications allow 32 bit dans les paramètres avancés de l'Application pool, et puis ça a marché!
modifier la section Paramètres avancés du pool d'applications - > définir 'activer les Applications 32 bits' à true a résolu mon problème.
vérifiez si la DLL était bloquée. Clic droit sur la Dll > propriétés > Débloquer.