作为背景,我试图让其中一个Emgu CV示例正常工作。它是Motion Detection example
中提到的the answer to "Looking for a function for motion detection on emgucv"为了使示例代码正常工作,我需要将Emgu CV DLL的引用添加到项目中,并确保将相关的Open CV DLL复制到项目构建的输出可执行目录中。相关的DLL列在on the EMGU wiki。
我正在添加Open CV DLL,方法是将它们作为内容添加到示例项目中,并在内容属性中将它们标记为“始终复制”:
我不希望这些杂乱的项目的根级别,所以我添加了一个项目文件夹来放置这些DLL:
但是,当我构建项目时,DLL会被复制到相同的目录层次结构,即它们在执行目录中有一个我不想要的封闭文件夹:
我需要设置哪些属性才能确保将DLL复制到执行目录中,而不是复制到其根目录而不是子目录中?
==========编辑==========
请注意,我不能将这些DLL添加为项目的引用,因为它们既不是.Net程序集也不是COM组件,而是Open CV C ++库。
答案 0 :(得分:4)
在工作中与另一位开发人员交谈,他使用了另一种解决方法。他将DLL保存在项目文件夹中,然后在项目的属性页中添加一个post-build事件,将DLL复制到包含可执行文件的目录中:
copy/b/y "$(ProjectDir)Libs\*.dll" "$(TargetDir)"
user7116's advice和我的同事是很好的解决方法,但是我会打开问题,以防万一有人发现(或微软添加)实际设置内容文件属性的方法,以确保DLL被复制到执行目录的根目录而不是子目录中。
答案 1 :(得分:3)
我们的小组将文件保存在与您类似的文件夹中,但是我们不是将文件夹添加到项目中,而是通过将项目作为链接添加到主项目中来引用这些DLL文件夹的级别:
与以前一样,将每个项目设置为内容和始终复制(解决方案文件夹中显示的项目):
然后在构建时,它们将进入输出目录:
它不是那么漂亮 - 你仍然可以在你的主项目中看到它们 - 但它至少会把它们放在正确的位置。