Самый чистый метод для копирования собственных библиотек DLL в проект .NET - PullRequest
6 голосов
/ 05 октября 2009

У меня есть приложение 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 ]

6 голосов
/ 05 октября 2009

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

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