У меня есть простое консольное тестовое приложение, 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 представляет собой комбинацию неуправляемого кода C ++ и C ++ / CLI. Это подозрительный характер, потому что это по сути первая C ++ / CLI .NET сборка, которую я создал, и в ней было много неуклюжей работы. Кажется, в отражатель нормально загружается.
- Эти усилия были предприняты, когда я пытался выяснить, почему я не смог успешно использовать COM-объект (назовите его
foo.dll
), который также ссылался на clipper.dll
- все также на той же проблемной машине. После нескольких часов ада регазма я смог еще больше изолировать его от этого.