2012-03-08 44 views
10

我有我想加爲我的項目的引用的DLL,但每次我嘗試做一個對話框彈出,告訴我:不能添加引用.NET

參考不能被添加。請確保該文件是可訪問的,並且它是有效的程序集或COM組件。

我已經研究了一點,發現了錯誤,因爲組件由.NET託管型,我應該使用DllImport屬性,但是,我在另一臺計算機完全相同的解決方案,並everythig只是正常工作。

區別在於我試圖添加引用的新計算機是x64,舊計算機是x86。

我有x64和x86 DLL,不能添加任何。這是爲什麼發生?

+0

您可能需要DllImport和P/Invoke,如答案中所述。 – Bahamut 2012-03-08 15:34:47

回答

-1

嘗試將您的平臺目標從任何CPU更改爲x86。 (項目屬性 - >構建 - >平臺目標)

12

無論32/64「bittyness」如何,您都無法在Visual Studio中添加非託管DLL作爲引用。我懷疑它在你的x86機器上工作。

「普通」DLL和COM-DLL之間有區別。

在向系統註冊後,您可以添加對COM-DLL的引用(實際上您引用了公開的COM對象,並且會自動添加對DLL的引用)。這可以在「添加引用」對話框的「COM」-Tab上完成(在這裏,您必須確保在大多數情況下您的項目是作爲x86目標構建的)。

正常的DLL可以 - 正如我所說 - 完全不會被添加。您可以包括他們在溶液(右鍵單擊解決方案,選擇「添加現有文件」),但他們不會被引用,除非你聲明類似

[DllImport("...")] 
public static extern void MyFunction(); 

我懷疑你的其他解決辦法,有一些一種包裝DLL,它實際上是引用的,其中包含DLL導入。

+0

我構建到像../bin/這樣的自定義目錄,並將所需的DLL放在該目錄中,這樣我的應用程序就可以在默認情況下查看它們。 Simples! – 2013-09-03 12:53:27

+0

@Skidoosh,你的技術只適用於託管的DLL。 – 2013-11-21 17:01:58

1

可能Type Library Importer (Tlbimp.exe)可以提供幫助。它創建一個包裝.NET DLL。原始的COM DLL必須仍然在那裏,並且必須註冊! (嘗試先使用TlbImp嘗試註冊它。)

如果64位版本不起作用,請在您的項目構建屬性中將平臺目標設置爲x84

0

一些DLL文件不能被添加作爲參考,但然而,他們仍然可以通過C#與著名[DllImport(params go here...)]

使用時,可能還需要inspect的DLL,爲了得到你想要的函數的地址使用。這可以通過使用GetProcAddress

2

多個 answeres你的問題來實現:

  1. 您可能會遇到這個問題,因爲你正在嘗試添加的組件針對性和編譯的x86處理器架構。只要嘗試更改目標平臺從x64x86即使該doent工作,請嘗試將其更改爲AnyCPU。 AnyCPU平臺目標使您的應用程序可在兩種類型的體系結構上執行,因爲它無需架構。

  2. 如果組件恰好是一個DLL,並且它不能被添加作爲參考,那麼它是不一個 COM 以及.NET組件。它將是一個像其他人一樣的本地程序集(例如,shell32.dll,user32.dl等)。您必須通過DllImport屬性使用它們,但您必須首先檢查該dll的文檔以獲取在該dll中實現的函數列表。

0

添加DLL的絕對路徑的DllImport

0

試圖分析這個問題,我發現以下

[1]有時你看到的參考經理的參考,但你不會後找到提到的目錄中的dll文件,其中 引用管理器無法實現引用。

[2]檢查你的dll文件的權限。