Боюсь, вам нужно отредактировать файл проекта вручную, чтобы добиться такого поведения. (К сожалению, внутри визуальных проектов C ++ нет меню для этого.)
Я бы порекомендовал сделать резервную копию перед началом редактирования файла проекта.
В visual studio вам необходимо выгрузить файл проекта X (щелкните правой кнопкой мыши и выберите «выгрузить проект» в обозревателе решений).
Затем снова щелкните правой кнопкой мыши и выберите «Редактировать X.vcxproj».
Внутри элемента Project вам нужно добавить ItemGroup следующим образом:
<ItemGroup Condition="'$(Configuration)'=='Release'">
<Content Include="E:\full_path\Y.dll">
<Link>Y.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup Condition="'$(Configuration)'=='Debug'">
<Content Include="E:\full_path\Yd.dll">
<Link>Yd.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
Если у вас нет другого файла DLL отладки (или 64- и 32-разрядной версии), вы можете использовать только одну группу элементов и удалить атрибут условия. Затем он скопирует Y.dll во все выходные данные проекта.
Затем сохраните изменения и перезагрузите проект (также щелкните правой кнопкой мыши).
Это решает проблему, потому что теперь проект 'Z' будет знать, что при сборке проекта 'X' ему нужно будет скопировать Y.dll в выходные данные проекта 'X' или родительский проект Ссылка 'X' .
(Было бы лучше использовать переменную вместо жестко закодированного пути, но я хотел сохранить пример простым.)
Я использую это во многих управляемых проектах C ++, которые ссылаются на сторонние или открытые библиотеки. И мне понадобилось время, чтобы понять это.
Надеюсь, это поможет!