Как реализовать управление зависимостями в проекте Visual Studio?
Всем доброго времени суток!
При сборке проекта на C#, сторонние библиотеки, подключенные через Add reference, попадают вместе со своими сопутствующими файлами в каталог с запускаемым файлом. Можно ли как-то в параметрах сборки указать как разложить зависимости?
PS
В Java'е все просто решается с помощью maven'а (в клинических случаях ant поможет достать что угодно, и положить в любое место), кладем зависимости в нужное место и прописываем их местоположение в манифест. Никаких похожих инструментов для VS я не нашел.
Не совсем понятно, что именно хочет автор. Но есть порт maven'а, может он может решить вашу проблему: incubator.apache.org/npanday
Еще можно попробовать сделать это с помощью NuGet.
А еще можно добавить нужные файлы прямо в проект и указать Build Action: "None" и Copy to Output Directory: "Copy If Newer" (файл будет скопирован с папку со сборкой с учетом пути от корня проекта).
Самый нижний вариант, то что надо. Я так сделал, но не указал "Копировать если новее", поэтому получал ошибки при сборке. Тем кто будет пользоваться этим вариантом не забудьте указать probing в App.config. Пример:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="bin;bin2\subbin;bin3"/>
</assemblyBinding>
</runtime>
</configuration>
Не совсем понял в чем проблема у автора, но можно использовать Post build event (консольные команды, или бывает удобнее создать .bat или консольное приложение и вызвать там) в настройках проекта для копирования всего, что надо, в требуемое место.
Наверно есть и более продвинутые системы, но не могу на счет них посоветовать, мне хватало и этого.
Я могу ошибаться т.к. лет 7 не работал с WinForms. Если ссылаетесь на DLL, которая расположена в другой папке, то экзешник при запуске будет искать эту папку с DLL. Если этой папки и DLL там нет то будет искать в папке с экзешником и в системных папках и в папках записанных в переменной окружения path. Что очень удобно если вы хотите показать работу программы на другой машине: копируете всю папку на флешку и не нужно ничего делать.
Как реализовать распределение по папкам. Ручками сделать структуру папок для DLL. Делаете установщик, который создает структуру папок для хранения и закидывает в них DLL. Раньше встроенного в VS шаблона проекта установщика хватало.
@SZolotov Не будет он искать, да и странно бы это было, программа ж не только на машине разработчика будет работать.
Но в конфиге можно указать подпапки stackoverflow.com/questions/3577320/using-referenc... (для нативных DLL есс-но не получится).
Еще в GAC можно кидать.