Почему мое приложение не может найти зависимую dll в том же каталоге?

У меня есть простое тестовое приложение консоли, ConsoleApplication1.exe , которая ссылается на другую сборку clipper.dll .

На 3 машинах, на которых я ее тестировал, можно разместить оба файла, например, в c: \ test \ и выполнить ConsoleApplication1.exe .

На другом компьютере, который оказывается клиентским, запуск ConsoleApplication1.exe приводит к сбою программы и на консоли печатается следующее :

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)

Это странно для меня, хотя я не очень понимаю правила загрузки dll, я думал, что он будет искать указанный файл в CWD. И тот факт, что эта же установка работает на различных других компьютерах, которые я пробовал, также является странным.

Любопытно, что на рабочем компьютере, если я удаляю clipper.dll, а затем запускаю его:

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)

Необработанное исключение немного отличается, с полным названием сборки.

  • И ConsoleApplication1.exe , и clipper.dll созданы для .NET 4.
  • На всех машинах установлена ​​среда выполнения .NET 4. На проблемной машине нет .NET sdk
  • clipper.dll - это комбинация ummanaged кода C ++ и C ++ / CLI. Это подозрительный персонаж, потому что это, по сути, первая сборка C ++ / CLI .NET, которую я создал, и в нее пришлось много возиться. Кажется, он отлично загружается в отражатель.
  • Эти усилия были предприняты, когда я пытался выяснить, почему мне не удалось успешно использовать COM-объект (назовите его foo.dll ), который также ссылался на ] clipper.dll - все тоже на той же проблемной машине. После нескольких часов адского регазма я смог еще больше изолировать его от этого.
8
задан fostandy 7 December 2010 в 08:40
поделиться