У меня есть простое тестовое приложение консоли, 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. foo.dll
), который также ссылался на ] clipper.dll
- все тоже на той же проблемной машине. После нескольких часов адского регазма я смог еще больше изолировать его от этого.