Способы поддержания DLL в актуальном состоянии - PullRequest
4 голосов
/ 27 мая 2009

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

Созданные проекты основаны на результатах других проектов. Однако вместо того, чтобы создавать зависимости обычным образом и поддерживать код, библиотеки DLL копируются из одного места в другое и на них ссылаются.

Есть ли простой способ обновить все мои библиотеки DLL в родительской папке до самой последней версии (по метке времени) во всем диапазоне папок?

Итак, процесс вкратце:

  1. Скомпилируйте все проекты и все решения в корневой папке.
  2. Найти и обновить все остальные копии выходные файлы.
  3. Перекомпилируй все и узнай что ломает.
  4. Обновление исходного кода и обновление ссылки.

Шаг проблемы равен 2.

(я прекрасно знаю, что это может сломать вещи)

Я использую Visual Studio 2005 и C # для создания библиотек DLL, однако желательно обновить файлы, а не код.

Ответы [ 4 ]

8 голосов
/ 27 мая 2009

Рекомендация корпорации Майкрософт, по возможности, заключается в ссылках на проекты, а не на библиотеки DLL, где это возможно.

Ссылки между проектами и ссылки на файлы

Ссылки на файлы являются прямыми на собраниях; вы создаете их, используя вкладка Обзор Добавить ссылку диалоговое окно. Проект к проекту ссылки являются ссылками на проекты содержащие сборки; вы создаете их используя вкладку Project в Add Справочное диалоговое окно.

Преимущество от проекта к проекту ссылка на то, что это создает зависимость между проектами в построить систему, поэтому зависимый проект будет построен, если он изменился с последний раз ссылочный проект был построен. Ссылка на файл не создать зависимость сборки, так что это можно строить ссылки проект без построения зависимого проект, и ссылка может стать устарел (то есть проект может ссылаться на ранее построенную версию проекта). Это может привести к несколько версий одной DLL требуется в каталоге bin, который это невозможно. Когда этот конфликт происходит, вы увидите сообщение, такое как Предупреждение: зависимость «файл» в проект «проект» не может быть скопирован в каталог запуска, потому что это будет перезаписать ссылку 'file.'.

Вы должны избегать добавления файла ссылки на выводы другого проект в рамках того же решения, потому что это может привести к компиляции ошибки. Вместо этого используйте вкладку Projects диалогового окна Добавить ссылку в создавать ссылки между проектами в том же решении. Это делает развитие команды легче, позволяя для лучшего управления классом библиотеки, которые вы создаете в своих проектах. Для получения дополнительной информации см. Устранение неисправностей сломанных ссылок и Как: создать и удалить проект Зависимости.

С здесь .

5 голосов
/ 27 мая 2009

Бывают случаи, когда ссылки между проектами не работают. Например, время сборки проектов или желание, чтобы несколько проектов зависели от конкретной сборки ссылки, или если тестирование ссылочного проекта завершено, и вы не хотите снова тестировать.

Если у вас есть система непрерывной интеграции и контроль версий, то альтернативой является проверка встроенных библиотек в систему контроля версий как часть сборки CI. Затем свяжите dll (например, внешний в svn) с зависимым проектом, это должно означать, что все ваши dll остаются в курсе.

2 голосов
/ 02 июня 2009

Более простой подход - создать решение, содержащее все необходимые проекты, изменить ссылки между ними для использования ссылок на проекты, изменить проекты так, чтобы все их выходные папки указывали на один и тот же каталог, а затем настроить ссылки на проекты так что для параметра «Копировать локальный» задано значение false.

Тогда все, что вам нужно сделать, это построить решение (либо в VS, либо в командной строке через msbuild).

Результатом сборки будет отдельная папка, в которой есть все нужные вам файлы, и в каждом проекте всегда будут актуальные ссылки.

2 голосов
/ 29 мая 2009

Не могли бы вы добавить шаг после сборки к включенным, но не по-настоящему включенным проектам, чтобы выгрузить библиотеки DLL в заранее подготовленное место? Оттуда вы можете добавить шаг предварительной сборки в зависимые проекты, чтобы получить новые библиотеки DLL из указанного местоположения. Определенно не лучшая практика, но она должна выполнить работу.

...