我有一個簡單的控制檯測試應用程序,ConsoleApplication1.exe
,其中引用另一個程序集clipper.dll
。爲什麼我的應用程序不能在同一個目錄中找到一個依賴的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
--所有這些也都在相同的問題機器上。經過幾個小時的地獄之後,我能夠進一步將其隔離。
也從安裝文件夾中刪除pdbs – TalentTuner 2010-12-07 08:46:38