2012-03-08 45 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文件的权限。