У меня есть приложение C # GUI, которое ссылается на проект Managed C ++, для которого требуется 7 собственных C ++ DLL. Я ищу самый чистый метод для копирования этих 7 DLL-файлов в окончательный вывод проекта.
Что работает
Добавьте все библиотеки DLL в приложения C #, указав:
Build Action == "Содержимое"
Копировать в выходной каталог == Копировать всегда "
Это сделает в некоторых случаях базовую папку проекта беспорядочной библиотекой DLL, все из которых являются требованиями проектов, на которые ссылаются, а не самого проекта.
Что не работает
- Добавление этих библиотек DLL в папку с именем «Required DLLs» с указанными выше настройками. Он копирует его в папку с тем же именем в выходных данных, в результате чего они находятся в неправильном месте. Я не вижу способа указать выходной каталог.
- Встроенные ресурсы. В C # P / Invoke вы можете добавить библиотеки DLL, на которые вы ссылаетесь, как встроенные ресурсы, и библиотеки DLL будут встроены в вашу конечную библиотеку. Я не вижу такой возможности в Managed C ++, и я даже не уверен, работает ли она со ссылочными цепочками.
- Добавление библиотек DLL в качестве содержимого в проекте Managed C ++. Файлы не копируются в выходной каталог.
Что является лучшим решением в этом случае? Я бы предпочел, чтобы проект Managed C ++ мог обрабатывать свои собственные требования к DLL, если это возможно, и желательно таким образом, чтобы не препятствовать использованию проекта в нескольких приложениях.
Что касается чистого проекта, то лучше ли вставлять все мои файлы кода в подпапки в проекте и иметь библиотеки DLL в корне, чтобы первое решение работало?
Решение:
Используя предложение Джозефа о пост-сборке, следующая команда решает использовать папку «Required DLLs».
xcopy "$ (ProjectDir) Обязательные библиотеки DLL *. *" "$ (TargetDir)" / Q / Y
/ Q скрывает отдельные файлы из вывода, а / Y подавляет запросы на перезапись.