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 включить все файлы, которые не копируются.

Другие вопросы по тегам