7

作为背景,我试图让 Emgu CV 示例之一工作。这是“在emgucv上寻找运动检测功能”的答案中提到的运动检测示例

为了让示例代码正常工作,我需要向项目添加对 Emgu CV DLL 的引用,并确保将相关的 Open CV DLL 复制到项目构建的输出可执行目录中。相关的 DLL 列在 EMGU wiki 上

我通过将 Open CV DLL 作为内容添加到示例项目并在内容属性中将它们标记为“始终复制”来添加 Open CV DLL:

VS2012 中的内容属性设置为

我不希望这些混乱到项目的根级别,所以我添加了一个项目文件夹来放置这些 DLL:

解决方案资源管理器显示包含 DLL 的项目文件夹

但是,当我构建项目时,将使用相同的目录层次结构复制 DLL,即它们在执行目录中有一个我不想要的封闭文件夹:

文件资源管理器显示包含 DLL 的目录

我需要设置哪些属性以确保将 DLL 复制到执行目录但复制到其根目录而不是子目录?

========== 编辑 ==========

请注意,我不能将这些 DLL 添加为对项目的引用,因为它们既不是 .Net 程序集也不是 COM 组件,而是 Open CV C++ 库。

4

2 回答 2

4

在工作中与另一位开发人员交谈时,他使用了另一种解决方法。他将 DLL 保存在项目文件夹中,然后在项目的属性页中添加构建后事件,以将 DLL 复制到包含可执行文件的目录中:

copy/b/y "$(ProjectDir)Libs\*.dll" "$(TargetDir)"

user7116 的建议和我同事的建议是很好的解决方法,但我将保留问题以防万一有人发现(或 Microsoft 添加)一种在内容文件上实际设置属性以确保将 DLL 复制到根目录的方法执行目录而不是子目录。

于 2013-10-11T06:11:16.837 回答
3

我们的小组将文件保存在与您类似的文件夹中,但是我们没有将文件夹添加到项目中,而是通过将项目作为链接添加到文件夹的顶层来在您的主项目中引用这些 DLL :

添加项目作为链接的图像

和以前一样,将每个项目设置为内容始终复制(项目显示在解决方案文件夹中):

解决方案的看法

然后,当您构建它们时,它们将进入您的输出目录:

输出目录

它没有那么漂亮——你仍然可以在你的主项目中看到它们——但它至少把它们放在了正确的位置。

于 2013-09-25T15:25:04.483 回答