C# 无法添加对.NET的引用

C# 无法添加对.NET的引用,c#,.net,visual-studio-2010,C#,.net,Visual Studio 2010,我有一个DLL,我想添加它作为我的项目的引用,但每次我尝试这样做时,都会弹出一个对话框告诉我: 无法添加引用。请确保该文件可访问,并且是有效的程序集或COM组件 我做了一些研究,发现错误是因为程序集不受.NET管理,我应该使用DLLImport属性,但是,我在另一台计算机上有相同的精确解,并且所有这些都可以正常工作 不同之处在于,我试图添加引用的新计算机是x64,旧计算机是x86 我有x64和x86 DLL,无法添加任何DLL。为什么会发生这种情况?尝试将平台目标从任何CPU更改为x86。(项目

我有一个DLL,我想添加它作为我的项目的引用,但每次我尝试这样做时,都会弹出一个对话框告诉我:

无法添加引用。请确保该文件可访问,并且是有效的程序集或COM组件

我做了一些研究,发现错误是因为程序集不受.NET管理,我应该使用DLLImport属性,但是,我在另一台计算机上有相同的精确解,并且所有这些都可以正常工作

不同之处在于,我试图添加引用的新计算机是x64,旧计算机是x86


我有x64和x86 DLL,无法添加任何DLL。为什么会发生这种情况?

尝试将平台目标从任何CPU更改为x86。(项目属性->构建->平台目标)

您不能在Visual Studio中添加非托管DLL作为引用,而不管32/64位的大小。我怀疑它在您的x86机器上是否有效

“普通”DLL和COM DLL之间存在差异

在向系统注册COM-DLL后,可以添加对该COM-DLL的引用(实际上,您引用了公开的COM对象,并且自动添加了对该DLL的引用)。这可以在“添加引用”对话框的“COM”选项卡上完成(在这里,您必须确保在大多数情况下,您的项目是作为x86目标构建的)

正如我所说,“正常”DLL完全不能添加。您可以将它们包括在解决方案中(右键单击解决方案,选择“添加现有文件”),但除非您声明类似的内容,否则不会引用它们

[DllImport("...")]
public static extern void MyFunction();
我怀疑在您的另一个解决方案中,存在某种包装器DLL,您实际上正在引用它,它包含DLL导入。

可能有帮助。它创建了一个包装器.NETDLL。原始COM DLL必须仍然存在并且必须注册!(在使用TlbImp尝试之前,请先尝试注册。)


如果64位版本不起作用,请在项目生成属性中将平台目标设置为
x84

某些DLL不能作为参考添加,但是,它们仍然可以由C#使用著名的
[DllImport(参数转到此处…)


您可能还必须
检查
dll,以获取要使用的函数的地址。这可以通过使用来实现。您的问题有多个答案:

  • 您可能会遇到此问题,因为您尝试添加的程序集是针对x86处理器体系结构进行编译的。只需尝试将目标平台从x64更改为x86,即使不起作用,也尝试将其更改为AnyCPU。AnyCPU平台目标使您的应用程序可以在这两种类型的体系结构上执行,因为它是无体系结构的

  • 如果程序集恰好是一个DLL,并且无法将其添加为引用,则它不是一个COM以及.NET程序集。它将像其他程序集一样是本机程序集(例如,shell32.dll、user32.dl等)。您必须通过DllImport属性使用它们,但必须首先检查该dll的文档,以获得在该dll中实现的函数列表


  • 在尝试分析这个问题之后,我发现了以下几点

    [1] 有时,您会在引用管理器中看到引用,但在提到的目录中找不到dll文件 参考资料管理器无法实现参考资料


    [2] 请检查dll文件的权限。

    您可能需要DllImport和p/调用答案中提到的内容。我将生成一个自定义目录,如../bin/并将所需的dll放置在该目录中,以便我的应用程序可以查看并默认定位它们。傻瓜!