如何使Visual Studio将DLL文件复制到输出目录?

我有一个Visual Studio C ++项目依赖于外部DLL文件。 我怎样才能使Visual Studio复制这个DLL文件自动到输出目录(debugging/释放),当我build立项目?

4 Solutions collect form web for “如何使Visual Studio将DLL文件复制到输出目录?”

在您的项目中使用后生成操作,并添加命令来复制有问题的DLL。 生成后操作被编写为批处理脚本。

输出目录可以被引用为$(OutDir) 。 项目目录是可用的$(ProjDir) 。 尝试在适用的情况下使用相对path,以便您可以复制或移动项目文件夹而不会中断生成后的操作。

$(OutDir)原来是VS2013中的一个相对path,所以我不得不将它与$(ProjectDir)结合起来以达到预期的效果:

 xcopy /y /d "$(ProjectDir)External\*.dll" "$(ProjectDir)$(OutDir)" 

顺便说一句,您可以通过在开头添加“echo”来轻松debugging脚本,并在构build输出窗口中观察扩展文本。

(这个答案只适用于C#不是C ++,对不起,我误解了原来的问题)

以前我已经通过DLL地狱了。 我的最终解决scheme是将非托pipeDLL作为二进制资源存储在托pipeDLL中,并在程序启动时将它们解压缩到一个临时文件夹中,并在处置时将其删除。

应该是.NET或pinvoke基础架构的一部分,因为它非常有用….它使得您的托pipeDLL易于pipe理,无论是使用Xcopy还是在更大的Visual Studio解决scheme中作为项目引用。 一旦你这样做,你不必担心后生成事件。

更新:

我在这里张贴代码在另一个答案https://stackoverflow.com/a/11038376/364818

上面的注释部分中的细节不适合我(VS 2013),当试图将输出DLL从一个C ++项目复制到另一个C#项目的释放和debugging文件夹在同一解决scheme。

我不得不添加下面的后构build操作(右键单击具有.dll输出的项目),然后添加属性 – >configuration属性 – >生成事件 – >生成后事件 – >命令行

现在我添加这两行来将输出的dll复制到两个文件夹中:

 xcopy /y $(TargetPath) $(SolutionDir)aeiscontroller\bin\Release xcopy /y $(TargetPath) $(SolutionDir)aeiscontroller\bin\Debug 
  • Visual Studio .NETdebugging器的“隐藏的秘密”?
  • 后缀#DEN表示variables的值是什么意思
  • 未find导入的项目“C:\ Microsoft.CSharp.targets”
  • 在编译时将文件复制到应用程序文件夹中
  • 性能如何影响未使用的使用指令?
  • Visual Studio中开发人员特定的app.config / web.config文件
  • 为什么我会收到“无法连接到服务器 - networking相关或特定于实例的错误”?
  • 如何在Visual Studio 2015中用clang编译C ++ for Windows
  • 如何以pipe理员身份运行Visual Studio默认情况下
  • Visual Studio项目和解决scheme的.gitignore
  • 如何让Visual Studio在TFS Get后打开Resolve Conflicts窗口