在与依赖项DLL不同的文件夹中输出编译目标的正确方法是什么?

时间:2017-01-31 12:08:12

标签: c++ visual-studio visual-studio-2015 projects-and-solutions solution

我有一个Visual Studio解决方案文件,其中包含一些项目(主要是C ++),
其中大多数是以非常标准的方式配置的,输出目录设置为" bin"目录。
他们中的一些人需要将他们的主要输出目标输出到" bin"的子目录。 (即" bin \ others"),但是他们的所有DLL依赖项(作为NuGet包管理)仍然被复制到" bin"目录。
(依赖项DLL必须在\ bin中,因为"其他"项目是在运行时由\ bin中的EXE加载的DLL,因此必须在EXE路径中找到依赖项)

输出路径结构如下所示:

\bin (main EXE and ALL dependencies DLLs)  
\bin\others (others projects, with their dependencies DLL in \bin)  

到目前为止我已尝试过:

  1. 为"其他人"更改$(OutDir)项目,但这不起作用,因为所有NuGet依赖项也将被复制到同一个输出目录。

  2. 将$(OutDir)保留到\ bin,但更改"其他"将TargetName项目设置为"其他\ $(ProjectName)",但这会在从干净重建(即自动构建)时导致错误,因为MSBuild(实际上是Microsoft.CppClean.targets文件) 默认情况下包含在VC ++项目中)尝试写入" $(IntDir)$(TargetName).Build.CppClean.log",它不存在(因为" $(IntDir)\ others \"目录尚未创建。)

  3. 我想避免构建后的操作,因为cmd之类的命令会遇到通过MSBuild进行并行自动构建的问题,并且项目中的MSBuild任务必须手动维护(VS IDE不支持它们,AFAIK)。

    关于如何解决这个问题的任何想法或建议?

1 个答案:

答案 0 :(得分:0)

默认dll搜索路径包括PATH环境变量(MSDN: standard search order for desktop applications)中列出的目录。

您可以考虑在调试环境中添加所需路径到PATH变量" Configuration Properties-> Debugging-> Environment"。类似于:" PATH = $ PATH; $(SolutionDir)\ bin \ others"。