2009-12-22 5 views
16

lors de l'exécution d'un prorgam, il me semble qu'il me manque une bibliothèque, quand je lance la sortie de mon projet, je reçois une exception au démarrage.Une procédure importée par {myassembly} n'a pas pu être chargée

A first chance exception of type 'System.IO.FileLoadException' occurred in mscorlib.dll 
An unhandled exception of type 'System.IO.FileLoadException' occurred in mscorlib.dll 

Additional information: A procedure imported by 'my assembly, Version=xx.1.1.0, Culture=neutral, PublicKeyToken=7292581204d9e04a' could not be loaded. 

'ScriptX.vshost.exe' (Managed): Loaded 'C:\WINDOWS\assembly\GAC_MSIL\System.Configuration\2.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll', No symbols loaded. 

Ma question est: comment puis-je déterminer quelle bibliothèque manque parce que, à ce stade, je ne vois pas les valeurs transmises à:

mscorlib.dll!System.AppDomain.ExecuteAssembly(string assemblyFile, System.Security.Policy.Evidence assemblySecurity, string[] args) + 0x3a bytes  

Répondre

11

Il existe en fait un mécanisme intégré pour ces diagnostics.

(1) Dans les propriétés du projet/débogage, assurez-vous 'Activer le débogage de code natif' est vérifié:

enter image description here

(2) Lever le drapeau show-loader-snaps - il est une clé de registre dans le IFEO , et est accessible par l'intermédiaire de l'interface utilisateur graphique 'GlobalFlags':

enter image description here

(3) exécuter l'application et inspecter les mêmes () verbos e volet de sortie. Vous pouvez passer la plupart du temps à la fin ou chercher 'ERROR'.

Plus de détails here.

+3

Je voudrais que je pourrais +10 cela – smirkingman

+2

Nous avions deux devs se cognant la tête contre un problème et cela nous a pointés directement à la réponse. Je vous remercie! –

8

fais-tu tout dllimport? - Cela ressemble à un problème avec une DLL non managée ne pas être trouvé?

La première chose est de faire en sorte que toute les années de dll non géré ou exe que vous appelez dans (via dllimport) sont déployés dans le même dossier que l'exécutable .Net que vous construisez

Si la source de l'assemblage d'appel n'est pas disponible, vous pouvez essayer d'utiliser reflector sur cette assemblée pour rechercher des déclarations dllimport

autres que vous pouvez activer la visionneuse de journal fustion pour tracer des problèmes de charge de montage - voir ce blog post et msdn page pour plus de détails

+0

Malheureusement, je n'ai pas accès à la source de cette DLL. S'il existe un moyen de déterminer quel assemblage n'a pas pu être chargé, cela peut être d'une grande aide. – BlueTrin

+0

Merci Richard, les deux liens ont été très utiles. – BlueTrin

3

Implem ent un gestionnaire pour l'événement AppDomain.AssemblyResolve. Il vous indique l'assembly recherché avec ResolveEventArgs.Name. Si c'est juste un effort pour résoudre ce problème, utilisez Fuslogvw.exe. Si le raccrochage est un assembly non géré, l'option Profil de DependencyWalker peut vous montrer l'échec de l'appel de LoadLibrary(). Le ProcMon de SysInternals fonctionnera aussi, mais il est beaucoup plus bruyant.

+0

Merci pour votre réponse, j'ai choisi la réponse de Richard parce que je viens de regarder ses messages et réussi à utiliser les journaux de fusiion. – BlueTrin

Questions connexes