我有一个依赖外部DLL文件的Visual Studio C项目 . 在构建项目时,如何使Visual Studio自动将此DLL文件复制到输出目录(调试/发布)?
当尝试将输出dll从一个C项目复制到同一解决方案中另一个C#项目的发布和调试文件夹时,上面的注释部分中的详细信息对我(VS 2013)不起作用 .
我必须添加以下post build-action(右键单击具有.dll输出的项目)然后属性 - >配置属性 - >构建事件 - >构建后事件 - >命令行
现在我添加了这两行来将输出dll复制到两个文件夹中:
xcopy /y $(TargetPath) $(SolutionDir)aeiscontroller\bin\Release xcopy /y $(TargetPath) $(SolutionDir)aeiscontroller\bin\Debug
在项目中使用构建后操作,并添加命令以复制有问题的DLL . 后构建操作是作为批处理脚本编写的 .
输出目录可以引用为 $(OutDir) . 项目目录可用作 $(ProjDir) . 尝试在适用的情况下使用相对路径,以便您可以复制或移动项目文件夹,而不会破坏构建后操作 .
$(OutDir)
$(ProjDir)
$(OutDir)原来是VS2013中的一个相对路径,所以我不得不将它与$(ProjectDir)结合起来以达到预期的效果:
xcopy /y /d "$(ProjectDir)External\*.dll" "$(ProjectDir)$(OutDir)"
顺便说一句,您可以通过在开头添加“echo”来轻松调试脚本,并在构建输出窗口中观察扩展文本 .
(这个答案只适用于C#而不是C,抱歉我误读了原来的问题)
我以前经历过这样的DLL地狱 . 我的最终解决方案是将非托管DLL作为二进制资源存储在托管DLL中,并在程序启动时将它们提取到临时文件夹,并在处理时将其删除 .
这应该是.NET或pinvoke基础结构的一部分,因为它非常有用....它使您的托管DLL易于管理,无论是使用Xcopy还是作为更大的Visual Studio解决方案中的Project引用 . 完成此操作后,您不必担心后期构建事件 .
更新:
我在这里发布了另一个答案https://stackoverflow.com/a/11038376/364818
4 回答
当尝试将输出dll从一个C项目复制到同一解决方案中另一个C#项目的发布和调试文件夹时,上面的注释部分中的详细信息对我(VS 2013)不起作用 .
我必须添加以下post build-action(右键单击具有.dll输出的项目)然后属性 - >配置属性 - >构建事件 - >构建后事件 - >命令行
现在我添加了这两行来将输出dll复制到两个文件夹中:
在项目中使用构建后操作,并添加命令以复制有问题的DLL . 后构建操作是作为批处理脚本编写的 .
输出目录可以引用为
$(OutDir)
. 项目目录可用作$(ProjDir)
. 尝试在适用的情况下使用相对路径,以便您可以复制或移动项目文件夹,而不会破坏构建后操作 .$(OutDir)原来是VS2013中的一个相对路径,所以我不得不将它与$(ProjectDir)结合起来以达到预期的效果:
顺便说一句,您可以通过在开头添加“echo”来轻松调试脚本,并在构建输出窗口中观察扩展文本 .
(这个答案只适用于C#而不是C,抱歉我误读了原来的问题)
我以前经历过这样的DLL地狱 . 我的最终解决方案是将非托管DLL作为二进制资源存储在托管DLL中,并在程序启动时将它们提取到临时文件夹,并在处理时将其删除 .
这应该是.NET或pinvoke基础结构的一部分,因为它非常有用....它使您的托管DLL易于管理,无论是使用Xcopy还是作为更大的Visual Studio解决方案中的Project引用 . 完成此操作后,您不必担心后期构建事件 .
更新:
我在这里发布了另一个答案https://stackoverflow.com/a/11038376/364818