2014-02-13 58 views
11

我正在構建一個dll,它引用了第二個dll。我已經在第一個dll的項目中添加了第二個dll作爲參考,前往Properties > Common Properties > Framework and References > Add New Reference > Browse無法加載文件或程序集系統找不到指定的文件

我從第三方的源代碼編譯了第二個dll。這兩個項目都是C++/CLI。 每當我的主要應用程序試圖調用一個函數,其中包含了對第二DLL的調用第1個DLL,我得到以下錯誤:

An unhandled exception of type 'System.IO.FileNotFoundException' occurred in Unknown Module.

Additional information: Could not load file or assembly 'NBIS, Version=1.0.5156.29834, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

我有第二個DLL在同一目錄下複製我的主要的exe文件,而且我甚至嘗試在第一個dll旁邊保留一個副本,但都無濟於事。

第二DLL引用幾個靜態庫,但它包含唯一集引用是

System

System.Data

System.Drawing

System.XML

所有這一切,我已經添加爲第1個DLL組件引用。

我能做些什麼來讓我的應用程序找到並加載第二個DLL?

+1

「或其依賴之一」 –

+0

@HansPassant由於唯一的動態庫引用是我列出的那些,不會表明這不是由於依賴? – duggulous

+0

這假定您知道nbis.dll的依賴關係。你不知道。供應商或作者知道。 –

回答

18

正如在評論中指出的,SysInternals'Process Monitor是一個診斷DLL解決問題的寶貴工具。告訴你什麼時候第三方DLL有一個你不知道的依賴關係,還會告訴你Windows何時在硬盤驅動器的錯誤角落查找文件或發現錯誤的文件。

Loader snaps是Windows的內置診斷工具。但是Process Monitor更方便。

它確實會生成相當多的信息,從跟蹤的底部開始或在恰當的時間啓用跟蹤。您經常需要使用其過濾工具來打開相關涓流中的排水管。值得花費時間弄清楚,這個工具屬於任何程序員的黑帶。

4

右鍵單擊你創建的dll項目和新的引用項目,然後選擇屬性。 在應用程序下,檢查目標框架並驗證兩者具有相同的框架,一些dll項目傾向於默認選擇「客戶端配置文件」版本的框架,這往往會給你現在有錯誤..

讓我知道如果這不是問題..

+1

這兩個項目都以.NET v4.5爲目標,如下圖所示: [dll1](http://ubuntuone.com/17dVhPyuIGaTtSBJla0xel) [dll2](http://ubuntuone.com/0YHXtKOvXuKnzwy8w4fbez) – duggulous

2

我的PowerShell ISE未作爲管理員運行。這似乎是我的問題。

0

請更改您的應用程序池設置。
保持步驟:

  1. IIS管理器中打開
  2. 點擊「應用程序池」(應用程序池列表)
  3. 選擇您的應用程序池
  4. 右鍵單擊應用程序池,然後選擇「高級設置」
  5. 將「啓用32位應用程序」從false更改爲true。(當您創建應用程序池啓用32位應用程序默認分配false)
相關問題