我如何解决“请确保该文件是可访问的,并且它是一个有效的程序集或COM组件”?

时间:2011-08-16 15:06:12

标签: c# .net dll opencv

我正在用C#中的OpenCV构建一个项目。它需要一个名为cvextern.dll的dll文件。但是,当添加此文件作为参考时,将显示以下消息: -

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

我厌倦了搜索,过去两天我一直在寻找解决问题的方法

7 个答案:

答案 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

文档:https://docs.microsoft.com/en-us/nuget/reference/nuspec