“始终复制”解决方案内容(DLL)到可执行目录root

时间:2013-09-24 15:18:35

标签: visual-studio dll visual-studio-2013

作为背景,我试图让其中一个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,方法是将它们作为内容添加到示例项目中,并在内容属性中将它们标记为“始终复制”:

Content properties in VS2012 set to "Copy always"

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

Solution Explorer showing project folder with DLLs in

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

File Explorer showing directory containing the DLLs

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

user7116's advice和我的同事是很好的解决方法,但是我会打开问题,以防万一有人发现(或微软添加)实际设置内容文件属性的方法,以确保DLL被复制到执行目录的根目录而不是子目录中。

答案 1 :(得分:3)

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

Image of adding items as a link

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

view of solution

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

output directory

它不是那么漂亮 - 你仍然可以在你的主项目中看到它们 - 但它至少会把它们放在正确的位置。