Самый чистый метод для копирования собственных библиотек DLL в проект.NET

У меня есть приложение 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 подавляет запросы на перезапись.

2 ответа

Решение

Вы можете использовать событие после сборки, чтобы скопировать содержимое каталога (например, ваш каталог "Required DLLs") в выходной каталог проекта.

  1. Вы можете работать со статическими библиотеками вместо динамических, это увеличит ваши dll, но одна dll вместо нескольких просто экономит время, и не только в вашем аспекте.
  2. Направьте все проекты в решении в один каталог (управляемый и неуправляемый).
Другие вопросы по тегам