我有我想加爲我的項目的引用的DLL,但每次我嘗試做一個對話框彈出,告訴我:不能添加引用.NET
參考不能被添加。請確保該文件是可訪問的,並且它是有效的程序集或COM組件。
我已經研究了一點,發現了錯誤,因爲組件由.NET託管型,我應該使用DllImport屬性,但是,我在另一臺計算機完全相同的解決方案,並everythig只是正常工作。
區別在於我試圖添加引用的新計算機是x64,舊計算機是x86。
我有x64和x86 DLL,不能添加任何。這是爲什麼發生?
我有我想加爲我的項目的引用的DLL,但每次我嘗試做一個對話框彈出,告訴我:不能添加引用.NET
參考不能被添加。請確保該文件是可訪問的,並且它是有效的程序集或COM組件。
我已經研究了一點,發現了錯誤,因爲組件由.NET託管型,我應該使用DllImport屬性,但是,我在另一臺計算機完全相同的解決方案,並everythig只是正常工作。
區別在於我試圖添加引用的新計算機是x64,舊計算機是x86。
我有x64和x86 DLL,不能添加任何。這是爲什麼發生?
嘗試將您的平臺目標從任何CPU更改爲x86。 (項目屬性 - >構建 - >平臺目標)
無論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導入。
我構建到像../bin/這樣的自定義目錄,並將所需的DLL放在該目錄中,這樣我的應用程序就可以在默認情況下查看它們。 Simples! – 2013-09-03 12:53:27
@Skidoosh,你的技術只適用於託管的DLL。 – 2013-11-21 17:01:58
可能Type Library Importer (Tlbimp.exe)可以提供幫助。它創建一個包裝.NET DLL。原始的COM DLL必須仍然在那裏,並且必須註冊! (嘗試先使用TlbImp嘗試註冊它。)
如果64位版本不起作用,請在您的項目構建屬性中將平臺目標設置爲x84
。
一些DLL文件不能被添加作爲參考,但然而,他們仍然可以通過C#與著名[DllImport(params go here...)]
使用時,可能還需要inspect
的DLL,爲了得到你想要的函數的地址使用。這可以通過使用GetProcAddress
有多個 answeres你的問題來實現:
您可能會遇到這個問題,因爲你正在嘗試添加的組件針對性和編譯的x86處理器架構。只要嘗試更改目標平臺從x64到x86即使該doent工作,請嘗試將其更改爲AnyCPU。 AnyCPU平臺目標使您的應用程序可在兩種類型的體系結構上執行,因爲它無需架構。
如果組件恰好是一個DLL,並且它不能被添加作爲參考,那麼它是不一個 COM 以及.NET組件。它將是一個像其他人一樣的本地程序集(例如,shell32.dll,user32.dl等)。您必須通過DllImport屬性使用它們,但您必須首先檢查該dll的文檔以獲取在該dll中實現的函數列表。
添加DLL的絕對路徑的DllImport
試圖分析這個問題,我發現以下
[1]有時你看到的參考經理的參考,但你不會後找到提到的目錄中的dll文件,其中 引用管理器無法實現引用。
[2]檢查你的dll文件的權限。
您可能需要DllImport和P/Invoke,如答案中所述。 – Bahamut 2012-03-08 15:34:47