c#-如何解决“请确保该文件可访问且它是有效的程序集或COM组件”?

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

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

我从搜索中感到疲倦,在过去的两天里,我一直在寻找该问题的解决方案

Omar Osama asked 2020-01-14T10:51:40Z
7个解决方案
26 votes

该文件是本机DLL,这意味着您无法通过“添加引用”将其添加到.NET项目中。可以通过DllImport使用它(请参阅[http://msdn.microsoft.com/zh-cn/library/ system.runtime.interopservices.dllimportattribute.aspx)]

Yahia answered 2020-01-14T10:51:59Z
25 votes

就我而言,我必须注册.dll。

为此,请打开具有管理员权限的cmd.exe(控制台),然后键入:

regsvr32 "foo.dll"
user2248818 answered 2020-01-14T10:52:23Z
4 votes

在构建应用程序时,请确保将所需的dlls导出(或手动复制)到bin文件夹中。

billy answered 2020-01-14T10:52:43Z
3 votes

我有相同的程序,希望对您有所帮助。

如果您使用Windows 7,请打开命令提示符->以管理员身份运行。 注册您的<...>。dll。

为什么以管理员身份运行,您可以使用Windows Start中的运行来注册<...>。dll,但即使您的帐户是管理员,您的dll也只能以用户身份运行。

现在您可以在Project-> Add Reference-> Browse中添加<...>。dll

谢谢

simoncsunas answered 2020-01-14T10:53:21Z
3 votes

'它'需要一个名为cvextern.dll的dll文件。 “它”可以是您自己的CS文件,也可以是您在项目中使用的其他第三方dll。

要将本机dll调用到您自己的cs文件中,请将dll复制到项目的root \ lib目录中,并将其添加为现有项。 (添加现有项目),并在正确的位置使用Dllimport。

对于第三方,请将本机库复制到第三方库所在的文件夹,并将其添加为现有项。

生成后,请确保所需的dlls出现在Build文件夹中。 在某些情况下,它可能不会出现或在Build文件夹中被替换。 手动删除Build文件夹,然后重新生成。

Jerin answered 2020-01-14T10:53:55Z
2 votes

在这里寻找TheMattster的答案。 我实现了它,它就像一个魅力。 简而言之,他的解决方案建议将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将它与我的应用程序一起部署,并且无法在我的项目中添加对它的引用,上述解决方案实际上是唯一的解决方案 工作了。

gneri answered 2020-01-14T10:54:38Z
0 votes

就我而言,我在工作区中也有非托管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/zh-cn/nuget/reference/nuspec#general-form-and-schema]

文档:[https://docs.microsoft.com/zh-cn/nuget/reference/nuspec]

leon22 answered 2020-01-14T10:55:11Z
translate from https://stackoverflow.com:/questions/7080447/how-do-i-resolve-please-make-sure-that-the-file-is-accessible-and-that-it-is-a