У меня есть две неуправляемые библиотеки C ++ DLL в решении, называемые A и B, и A имеет ссылку на B. Я хочу скопировать B.dll в каталог приложения для A. Когда я нажимаю «Копировать локальную» на ссылку в A » Фреймворк и ссылки »в свойствах проекта, похоже, что оно установлено в значение true, но нажатие кнопки« Применить »возвращает значение обратно в« ложь ». Есть идеи, что здесь?
Я знаю, что это было давно, но я только столкнулся с этой проблемой и нашел эту страницу соединения:
Похоже, это известная проблема. Вы можете обойти это, отредактировав файл проекта.
@HoopSomuah Даже если вы исправите ошибку подключения и установили параметр «Копировать локально», Visual Studio по-прежнему не будет копировать зависимые библиотеки или библиотеки в целевую папку для A, независимо от того, какие флаги вы указали для ссылки на B в проекте. A.
Неуправляемая обработка ссылок в Visual Studio 2015 все еще не работает, и я уверен, что 2017 год также плох.
@JasonFry Как отметил @HansPassant, вам нужно добавить событие пост-сборки в проект A, чтобы скопировать B.dll в ту же папку, что и A.dll.
Visual Studio не предоставляет простого способа получить путь к B.dll из проекта A, поэтому мы можем заставить проект B записать этот путь в текстовый файл, а затем заставить проект A прочитать путь из этого текстового файла и скопировать B .dll в ту же папку, что и A.dll.
откройте свойства проекта для B и добавьте это как событие после сборки:
echo $(TargetPath)>$(SolutionDir)References.txt
в свойствах проекта для A добавьте как событие после сборки:
for /f %%f in ($(SolutionDir)References.txt) do xcopy /y %%f $(TargetDir)
Если у вас был третий проект C.dll, который также необходимо скопировать в выходную папку A, добавьте аналогичное событие после сборки в свойствах проекта для C (обратите внимание >> вместо > поэтому он добавляет текстовый файл вместо того, чтобы перезаписывать его):
echo $(TargetPath)>>$(SolutionDir)References.txt
У меня была эта проблема некоторое время назад. По сути, это правда, поэтому он копирует файл, а затем устанавливает себе значение false, чтобы не допустить его повторного копирования.