J'ai une application de test de console simple, ConsoleApplication1.exe
, qui fait référence à un autre assemblage clipper.dll
.Pourquoi mon application ne trouve-t-elle pas une DLL dépendante dans le même répertoire?
Sur 3 machines sur lesquelles j'ai testé, il est possible de placer les deux fichiers par ex. c:\test\
et exécutez ConsoleApplication1.exe
.
Sur une autre machine, qui se trouve être une machine cliente, en cours d'exécution ConsoleApplication1.exe
résultats dans un accident de programme et ce qui suit en cours d'impression à la console:
C:\test>dir
Volume in drive C has no label.
Volume Serial Number is 7C46-414F
Directory of C:\test
07/12/2010 06:08 PM <DIR> .
07/12/2010 06:08 PM <DIR> ..
07/12/2010 05:13 PM 11,776 ClassLibrary1.dll
07/12/2010 05:13 PM 30,208 ClassLibrary1.pdb
07/12/2010 04:55 PM 3,572 ClassLibrary1.tlb
19/11/2010 02:46 PM 235,008 clipper.dll
19/11/2010 02:46 PM 1,534,976 clipper.pdb
07/12/2010 05:13 PM 6,144 ConsoleApplication1.exe
07/12/2010 05:13 PM 11,776 ConsoleApplication1.pdb
01/08/2010 12:52 PM 139,264 nunit.core.dll
01/08/2010 06:41 AM 57,344 nunit.core.interfaces.dll
01/08/2010 06:41 AM 135,168 nunit.framework.dll
01/08/2010 06:41 AM 547,262 nunit.framework.xml
11 File(s) 2,712,498 bytes
2 Dir(s) 477,821,784,064 bytes free
C:\test>ConsoleApplication1.exe
Unhandled Exception: System.IO.FileNotFoundException: Could not load file or ass
embly 'clipper.dll' or one of its dependencies. The specified module could not b
e found.
at ConsoleApplication1.Program.Main(String[] args)
Ceci est un moi étrange, bien que je don Je ne comprends pas les règles de chargement dll complètement, je pensais qu'il chercherait le CWD pour le fichier spécifié. Et le fait que cette même configuration fonctionne sur les différents autres ordinateurs que j'ai essayés est également étrange.
Chose curieuse, sur un ordinateur de travail si je retire clipper.dll puis exécutez:
C:\Temp>ConsoleApplication1.exe
Unhandled Exception: System.IO.FileNotFoundException: Could not load file or ass
embly 'clipper, Version=1.0.3975.26584, Culture=neutral, PublicKeyToken=null' or
one of its dependencies. The system cannot find the file specified.
at ConsoleApplication1.Program.Main(String[] args)
L'exception non gérée est légèrement différente, avec un nom de montage complet.
- Les deux
ConsoleApplication1.exe
etclipper.dll
sont construits pour 4. .NET - Toutes les machines ont le runtime .NET 4 installé. La machine de problème n'a pas le .NET sdk
- clipper.dll est une combinaison de code C++ ummanaged et C++/CLI. C'est un caractère suspect car c'est en fait le premier assemblage C++/CLI .NET que j'ai créé et beaucoup de tâtonnements. Il semble charger dans le réflecteur bien.
- Ces efforts sont venus lorsque j'ai essayé de comprendre pourquoi je ne pouvais pas utiliser avec succès un objet COM (appelez-le
foo.dll
) qui a également référencéclipper.dll
- tous également sur le même ordinateur à problème. Après plusieurs heures d'enfer de regasme, j'ai pu l'isoler davantage.
également supprimer pdbs à partir du dossier d'installation – TalentTuner