我正在用C#中的OpenCV构建一个项目。它需要一个名为cvextern.dll
的dll文件。但是,当添加此文件作为参考时,将显示以下消息: -
无法添加引用“cvextern.dll”,请确保该文件可以访问,并且它是有效的程序集或COM组件。
我厌倦了搜索,过去两天我一直在寻找解决问题的方法
答案 0 :(得分:25)
在我的情况下,我必须注册.dll。
要执行此操作,请使用管理员权限打开cmd.exe
(控制台)并键入:
regsvr32 "foo.dll"
答案 1 :(得分:24)
该文件是本机DLL,这意味着您无法通过添加引用将其添加到.NET项目...您可以通过DllImport使用它(请参阅http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.aspx)
答案 2 :(得分:4)
确保在构建应用程序时将所需的dll导出(或手动复制)到bin文件夹。
答案 3 :(得分:3)
我有同样的计划,我希望这可以帮助。
我使用Windows 7,打开命令提示符 - >以管理员身份运行。注册您的< ...> .dll。
为什么以管理员身份运行,您可以使用Windows Start中的运行注册< ...> .dll,但您的dll只能以用户身份运行,即使您的帐户是管理员。
现在您可以在项目中添加< ...> .dll->添加参考 - >浏览
由于
答案 4 :(得分:2)
通过 TheMattster 查看here的答案。我实现了它,它就像一个魅力。简而言之,他的解决方案建议将COM dll添加为项目的资源(现在它编译成项目的dll),并在第一次运行时将其写入文件(即我想要的dll文件)首先是。)
以下是他的回答。
步骤1)将DLL添加为资源(下面为" Resources.DllFile")。要执行此操作打开项目属性,请选择资源选项卡,选择"添加现有文件"并将DLL添加为资源。
步骤2)将DLL的名称添加为字符串资源(下面为" Resources.DllName")。
步骤3)将此代码添加到主表单加载:
if (!File.Exists(Properties.Resources.DllName))
{
var outStream = new StreamWriter(Properties.Resources.DllName, false);
var binStream = new BinaryWriter(outStream.BaseStream);
binStream.Write(Properties.Resources.DllFile);
binStream.Close();
}
我的问题是,不仅我必须在我的项目中使用COM dll,我还必须使用ClickOnce将其部署到我的应用程序,并且无法在我的项目中添加对它的引用,上述解决方案实际上是只有一个有效。
答案 5 :(得分:2)
'它'需要一个名为cvextern.dll的dll文件。 '它'可以是您自己的cs文件,也可以是您在项目中使用的其他第三方dll。
要将本机dll调用到您自己的cs文件,请将dll复制到项目的root \ lib目录中,并将其添加为现有项目。 (添加 - 表示项目)并使用Dllimport和正确的位置。
对于第三方,将本机库复制到第三方库所在的文件夹,并将其添加为现有项目。
构建完成后,确保所需的dll出现在Build文件夹中。在某些情况下,它可能不会出现或在Build文件夹中被替换。手动删除Build文件夹并重新构建。
答案 6 :(得分:0)
就我而言,我在工作区中也有非托管dll(C ++),并且如果您指定:
<files>
<file src="bin\*.dll" target="lib" />
</files>
nuget会尝试将每个dll作为程序集加载,甚至是C ++库!为了避免这种情况
行为使用references
标签明确定义您的C#程序集:
<references>
<reference file="Managed1.dll" />
<reference file="Managed2.dll" />
</<references>
备注:引用的父级是元数据->根据文档 https://docs.microsoft.com/en-us/nuget/reference/nuspec#general-form-and-schema