2010-12-10 77 views
23

J'ai cette DLL que j'ai créée il y a longtemps et que j'utilise pour me connecter à la base de données d'un logiciel spécifique pour lequel je développe. Je n'ai eu aucun problème pendant plus de 4 ans et d'innombrables applications avec cette DLL.Impossible de charger le fichier ou l'assemblage '***. Dll' ou l'une de ses dépendances

Essayer de déployer ma dernière création, je reçois l'erreur suivante:

System.IO.FileNotFoundException: Could not load file or assembly '***.dll' or one of its dependencies. The specified module could not be found. 

Ainsi, pour chaque dll que j'ai jamais écrit, j'ai toujours fait une simple application de formulaires pour vérifier que dll par elle-même. L'exécution de cette application simple a généré la même erreur. La DLL ne charge ou n'utilise rien d'autre que: System, System.Data, System.XML. Donc, en ce qui concerne les dépendances, je ne vois rien de mal. Par ailleurs, tout fonctionne sur une station de dev. Le problème est limité aux stations de déploiement. .Net et les redistribuables nécessaires, puisque je fais tout en C++, sont déployés et fonctionnent. Exécution FUSLOGVW.exe a montré que tout fonctionnait correctement.

L'exécution de depends.exe a indiqué: Avertissement: Au moins un module a une importation non résolue en raison d'une fonction d'exportation manquante dans un module dépendant de la charge de retard.

J'ai déjà essayé de réécrire le tout. Qui a donné les mêmes résultats.

Des indices pour quelqu'un?

Permet de modifier

Voici le message d'erreur totale:

See the end of this message for details on invoking \" 
just-in-time (JIT) debugging instead of this dialog box.\" 

************** Exception Text **************\" 
System.IO.FileNotFoundException: Could not load file or assembly 'connectionTo.dll' or one of its dependencies. The specified module could not be found.\" 
File name: 'connectionToJobboss32.dll'\" 
    at TESTConnection.Form1.button1_Click(Object sender, EventArgs e)\" 
    at System.Windows.Forms.Control.OnClick(EventArgs e)\" 
    at System.Windows.Forms.Button.OnClick(EventArgs e)\" 
    at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)\" 
    at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)\" 
    at System.Windows.Forms.Control.WndProc(Message& m)\" 
    at System.Windows.Forms.ButtonBase.WndProc(Message& m)\" 
    at System.Windows.Forms.Button.WndProc(Message& m)\" 
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)\" 
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)\" 
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)\" 
\" 



************** Loaded Assemblies **************\" 
mscorlib\" 
    Assembly Version: 4.0.0.0\" 
    Win32 Version: 4.0.30319.1 (RTMRel.030319-0100)\" 
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll\" 
----------------------------------------\" 
TESTConnection\" 
    Assembly Version: 1.0.3996.18980\" 
    Win32 Version: \" 
    CodeBase: file:///C:/Program%20Files%20(x86)/conn/TESTConnection.exe\" 
----------------------------------------\" 
System.Windows.Forms\" 
    Assembly Version: 4.0.0.0\" 
    Win32 Version: 4.0.30319.1 built by: RTMRel\" 
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll\" 
----------------------------------------\" 
System.Drawing\" 
    Assembly Version: 4.0.0.0\" 
    Win32 Version: 4.0.30319.1 built by: RTMRel\" 
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll\" 
----------------------------------------\" 
System\" 
    Assembly Version: 4.0.0.0\" 
    Win32 Version: 4.0.30319.1 built by: RTMRel\" 
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll\" 
----------------------------------------\" 

Il n'y a pas d'erreur dans l'observateur d'événements.

Répondre

18

J'ai eu le même problème avec un dll hier et tout ce qu'il référencé était System, System.Data et System.Xml. Il s'avère que la configuration de construction pour le type de plate-forme ne s'alignait pas. La DLL a été compilée pour x86 et le programme l'utilisant était "Any CPU" et depuis que j'exécute une machine x64, elle a exécuté le programme en tant que x64 et a eu des problèmes avec la DLL x86. Je ne sais pas si c'est votre problème ou non, je pensais juste que je le mentionnerais comme quelque chose d'autre à vérifier.

+0

Depuis que j'écris dans Managed C++ le "Any CPU" n'existe pas. J'ai vérifié le gestionnaire de configuration de toute façon et les deux, dll et app, sont définis pour Win32. Depuis que je construis cela en 32 bits, je l'ai exécuté à partir de mon dossier Program Files (x86) afin d'éviter les problèmes avec 64 bits. ... Alors j'avais regardé cela, mais je n'ai rien vu de mal. Oh, et l'une des stations sur lesquelles j'essaie de déployer est une machine 32 bits de toute façon. –

+0

A eu un problème similaire. J'ai lu votre réponse et ne pouvais pas le changer avec l'interface VS. J'ai donc ouvert le fichier de projet dans l'éditeur de texte et le modifier manuellement à AnyCPU, et cela fonctionne.Même l'interface VS accepte la valeur comme il se doit à la première place. –

4

Je suis tombé sur ceci récemment. Il s'est avéré que l'ancienne DLL était compilée avec une version précédente (Visual Studio 2008) et faisait référence à cette version des bibliothèques d'exécution dynamiques. J'essayais de l'exécuter sur un système qui n'avait que .NET 4.0 et je n'avais jamais installé de bibliothèques d'exécution dynamiques. La solution? J'ai recompilé la DLL pour lier les bibliothèques d'exécution statiques.

Vérifiez le journal des erreurs de votre application dans l'Observateur d'événements (EVENTVWR.EXE). Il vous donnera plus d'informations sur l'erreur et vous indiquera probablement la cause réelle du problème.

+0

J'ai regardé l'observateur d'événements et posté le message d'erreur que je reçois complètement. Rien ne s'affiche dans l'observateur d'événements. –

+1

Vous dites que cela fonctionne sur la machine de développement mais pas sur la machine de déploiement. Déployez-vous une version de débogage de la DLL et vous n'avez pas les bibliothèques de débogage sur la machine de déploiement? Y at-il une autre version de connectionTo.dll ou connectionToJobboss32.dll quelque part dans le chemin de recherche? –

+0

J'ai essayé les deux versions de débogage et de publication. Tous avec les mêmes erreurs. J'avais l'habitude d'obtenir l'erreur MSVCR100.dll manquant. Quelle est la bibliothèque redistribuable pour les applications faites avec MS VC++, mais je le copie avec l'application maintenant. Je le remplace également par MSVCR100d.dll lors de la copie de la version de débogage à la place. –

30

or one of its dependencies

C'est le problème habituel, vous ne pouvez pas voir une DLL manquant manquant avec Fuslogvw.exe. La meilleure chose à faire est d'exécuter l'utilitaire ProcMon de SysInternals. Vous le verrez chercher la DLL et ne pas le trouver. Le mode Profil dans Dependency Walker peut également le montrer.

+1

Pourriez-vous indiquer ce qu'il faut rechercher dans le journal ProcMon ou même dans Dependency Walker? Je ne vois honnêtement rien mais des succès dans les deux utilités. Dans ProcMon, je vois quelques "Fichier non trouvé", mais ils sont immédiatement suivis par une recherche du même fichier dans un autre chemin et rencontré un succès. –

+0

Vous regardez la bonne chose afaict. Décevant, c'est normalement un moyen infaillible de le voir. Aucune idée, au-delà de la noyade dans les données. Vous pouvez enregistrer la trace et la mettre sur un service de partage de fichiers si vous voulez un autre jeu d'yeux dessus. –

+1

La définition du champ 'Répertoire de travail' dans les paramètres du projet .NET (onglet' Debug') du répertoire avec toutes les DLL dont dépendait mon programme m'a permis de résoudre ce problème. – MasterMastic

6

J'ai eu le même problème. Pour moi, il a été provoqué par les paramètres par défaut dans le serveur IIS local sur mon ordinateur.La solution la plus simple était donc d'utiliser le serveur de développement Visual Studio intégré à la place :)

Les nouvelles versions d'IIS sur les machines x64 ont un paramètre qui ne permet pas aux applications 32 bits de s'exécuter par défaut. Pour activer les applications 32 bits dans les IIS locaux, sélectionnez le pool d'applications approprié dans le gestionnaire IIS, cliquez sur "Paramètres avancés" et modifiez "Activer les applications 32 bits" de Faux à Vrai

2

Cette réponse est totalement indépendante des OP situation, et est un scénario très peu probable pour quelqu'un d'autre, mais juste au cas où il peut aider quelqu'un ...

Dans mon cas, je recevais "Impossible de charger le fichier ou l'assemblage 'System.Windows.Forms, Version = 4.0.0.0 ... "parce que j'avais démonté et réassemblé le programme en utilisant ILDAsm.exe et ILAsm.exe à partir de .Net Framework/SDK version 2. Passage à ILDAsm.exe et ILAsm.exe à partir de .Net Framework/SDK version 4 corrigé le problème.

(Étrangement, même si faire ce que je faisais peut sembler une erreur évidente, le fichier EXE résultant qui n'a pas fonctionné certes indiqué pour cible .Net 4 lors de l'examen avec JetBrains dotPeek.)

3

J'ai récemment a rencontré ce problème, l'application fonctionnerait bien sur les machines de développement et sélectionner d'autres machines mais pas sur les machines récemment installées. Il s'est avéré que les machines sur lesquelles il travaillait avaient le Visual C++ 11 Runtime installé alors que les machines fraîchement installées ne l'avaient pas. Ajout du Visual C++ 11 Runtime redistribuable à l'installateur d'application fixe la question ...

+1

Notez qu'il existe 2 versions de Visual C++ Runtime: 32 et 64 bits. Installez les deux pour être sûr. Dans mon cas, seul le paquet 64 bits a résolu le problème. – kDar

0

1) DLLs Copie de "Externals \ ffmpeg \ bin" à votre répertoire de sortie du projet (où les séjours exécutables); 2) Assurez-vous que votre projet est construit pour la cible x86 (fonctionne en mode 32 bits).

Follow this thread for more

0

Un moyen plus facile de déterminer les dépendances d'une DLL native a est d'utiliser Dependency Walker - http://www.dependencywalker.com/

J'ai analysé la DLL native et a découvert que cela dépendait de MSVCR120.DLL et MSVCP120.DLL, Les deux n'ont pas été installés sur mon serveur de transfert dans le répertoire System32. J'ai installé l'environnement d'exécution C++ sur mon serveur de transfert et le problème a été résolu.

1

J'ai eu le même problème - une .dll de travail tout le temps, alors mon ordinateur en panne et après j'eu ce problème de «ne pouvait pas charger le fichier ou l'assemblage .... dll

Deux solutions possibles: lorsque l'ordinateur est écrasé il peut y avoir des fichiers incompatibles dans

C:\Users\<yourUserName>\AppData\Local\Temp\Temporary ASP.NET Files 

Supprimer ce dossier, recompiler et l'erreur a disparu. Une fois j'ai dû également supprimer mon dossier de paquets (j'avais lu cela ailleurs). Autorisez Visual Studio/nuget à installer les paquetages manquants (ou à les réinstaller manuellement) et tout s'est bien passé.