VS2008.NET: получение зависимостей ссылочного проекта для копирования в папку bin основного проекта
Предположим, у меня есть проект C# Winforms, MainGUI.
Он ссылается на другой проект в том же решении, ControlsLib.
ControlsLib ссылается на сторонний набор элементов управления, такой как элементы управления Infragistics или Telerik, и предоставляет набор пользовательских элементов управления, которые используются в MainGUI.
Копия Local установлена в true для всех ссылок в ControlsLib, и все сторонние библиотеки DLL отображаются в ControlsLib\bin\release.
Однако я не могу заставить сторонние библиотеки DLL автоматически копировать в MainGUI\bin\release, папку, из которой создается установщик программного обеспечения (в данном случае с использованием NSIS)
Поэтому сторонние DLL-библиотеки управления не включаются в установку, что приводит к исключению FileNotFoundException во время выполнения, когда используются элементы управления из ControlsLib, которые зависят от сторонних DLL-файлов.
Есть ли "правильный" способ сделать это, о котором я не знаю? Ранее я только что обработал это в скрипте nant build, скопировав файлы, но я начинаю новый проект и просто хотел проверить.
Спасибо
4 ответа
Я только что решил эту проблему, добавив следующую командную строку события после сборки в файл.csproj для MainGUI (свойства проекта -> события сборки)
copy $(SolutionDir)ControlsLib\bin\$(ConfigurationName)\Infragistics2*.dll $(TargetDir)
Я не осознавал, что сделать это было так легко на самом деле...
Вам нужно будет добавить ссылку на необходимые файлы из проекта пользовательского интерфейса (MainGUI) и настроить их для копирования в выходную папку оттуда. Встроенные инструменты упаковки (IIRC) каскадно их корректируют, но для внешних инструментов, я думаю, вам нужно будет сделать это вручную.
На моем сервере сборки я использую скрипт, который исследует ссылки и добавляет все дочерние ссылки непосредственно перед его сборкой (редактируя файлы csproj как xml)... код не велик, но он выполняет свою работу.
У меня была похожая проблема с использованием Gentle.NET (O/R Mapper). Одна из DLL отказывается копировать. Я провел расследование в течение нескольких часов и не смог найти причину. Все остальные файлы копируются, но этот исключен по какой-то странной причине. Gentle использовал три библиотеки DLL, Gentle.Common.DLL, Gentle.Framework.DLL и Gentle.SQLProvider.DLL. Последний никогда не копируется.
В конце концов я просто сделал сценарий...
Если вы измените основные свойства проекта (исполняемые) на вкладке "Публикация" (опция "Файлы приложения"), то вы сможете указать VS включить все файлы, которые не копируются.