fos*_*ndy 8 c# dll interop c++-cli
我有一个简单的控制台测试应用程序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)
Run Code Online (Sandbox Code Playgroud)
这对我来说很奇怪,虽然我不完全理解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)
Run Code Online (Sandbox Code Playgroud)
未处理的异常略有不同,具有完整的程序集名称.
ConsoleApplication1.exe并clipper.dll都建立了.NET 4.foo.dll同时引用的COM对象(也称为)时,这些努力就出现了clipper.dll- 所有这些也都在同一个问题机器上.经过几个小时的诅咒后,我能够进一步将它与此分开.