2009-12-30 3 views
0

Решение моей Visual Studio имеет несколько проектов с поздними связями (dll), которые загружаются другими проектами во время выполнения. Загрузка dll зависит от некоторого состояния времени выполнения.Добавление ссылки без импорта типов

Чтобы загрузить dll во время выполнения, мне нужно, чтобы он присутствовал в каталоге bin приложения, и есть несколько таких приложений. Для этого я запускаю сценарий пост-сборки, который копирует dll с поздними данными в каждое приложение, которое может понадобиться. Я хотел бы избавиться от скрипта, потому что он создает тяжелый процесс пост-сборки xcopy, который на самом деле не нужен.

Что вы используете в этом случае?

Я также могу добавить ссылку на dll из каждого приложения, однако в этом случае я создам ссылку на тип, и я (или другой разработчик) может случайно ссылаться на тип из поздней связанной dll, который может отсутствовать на клиентском сервер.

ответ

1

Я уже сталкивался с этой проблемой, но это довольно неприятно. Подход, который я беру сейчас, - удалить зависимость каталога; экстернализируйте расположение этих поздних библиотек (в файле конфигурации), а затем сохраните их в общем местоположении, на которое вы устанавливаете вывод сборки для библиотек.

Когда дело доходит до развертывания, вы изменяете эту настройку и упаковываете библиотеки с помощью установщика.

Это особенно полезно при разработке/отладке нескольких независимых приложений, поскольку вам нужно отслеживать только одну копию библиотек.

Если это не вариант для вас - возможно, это слишком сложно для экстернализации или, возможно, существуют значительные отклонения в зависимостях от одного приложения к другому, - тогда я бы пошел с ответом nobugz.

0

Измените вывод сборки всех поздних проектов, которые будут построены непосредственно в проекте, где вы хотите, чтобы они были связаны последними. Поэтому вместо того, чтобы создавать их самостоятельно/bin/debug /, создайте их для .../MyMainApp/bin/Debug/.

+0

Спасибо, Хитрый. Вывод сборки уже перенаправлен. Проблема в том, что dll необходимо скопировать в несколько папок, так как решение содержит несколько независимых приложений. Я также думаю об общей родительской папке для всех связанных библиотек dll. –

+0

У нас есть аналогичная ситуация, чтобы решить эту проблему, мы строим все проекты в один каталог (c: \ OurProductName). Таким образом, папка содержит все библиотеки DLL и все приложения (EXE), которые у нас есть. – Sylvain

1

Вам не нужно делать это ссылкой, чтобы скопировать его в проект клиента. Project + Добавить существующий элемент, выберите DLL. Установите для параметра «Действие сборки» значение «Нет», «Копировать на вывод» в «Копировать, если новый».

+0

nobugz: Это только автоматическое, если есть ссылки на эти DLL в проекте клиента. Он написал, что предпочел бы не добавлять ссылки (см. Его последний комментарий). – Sylvain

Смежные вопросы