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

What is the correct way to output compiled target in a different folder than dependencies DLLs?

本文关键字:编译 目标 是什么 方法 输出 依赖 不同于 DLL 文件夹      更新时间:2023-10-16

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

输出路径结构如下所示:

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

到目前为止我尝试过的:

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

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

我希望避免生成后操作,因为类似cmd的命令在通过MSBuild进行并行自动生成时存在问题,并且必须手动维护项目中的MSBuild任务(VSIDE不支持它们,AFAIK)。

关于如何解决这个问题,有什么想法或建议吗?

默认dll搜索路径包括path环境变量中列出的目录(MSDN:桌面应用程序的标准搜索顺序)。

您可以考虑在调试环境"配置属性->调试->环境"中为path变量添加所需的路径。类似于:"PATH=$PATH;$(SolutionDir)\bin\others"。