Как лучше всего хранить библиотеки DLL и ссылаться на них?

Часто разработчик из моей команды создает новый проект Visual Studio и ссылается на DLL где-нибудь на своем локальном компьютере (например, C: \ mydlls \ homersimpson \ test.dll). Затем, когда я получаю проект из репозитория системы управления версиями, я не могу создать проект, потому что у меня нет указанной DLL в том же месте на моем компьютере.

Как лучше всего хранить разделяемые библиотеки и ссылаться на них?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
25
0
9 694
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

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

Как не? Вы не включаете все связываемые модули в SCC?

dkretz 22.12.2008 06:31

Правильно - «Перейти прямо в dll-hell. Не пройти Go, ...»

dkretz 22.12.2008 07:19

Если сборки нет в GAC, создайте каталог с именем dependencies и добавьте туда все сборки. Папка и сборки добавляются в систему управления версиями. Правило состоит в том, что для любого проекта в системе управления версиями все, что требуется для сборки, - это выполнить проверку и построить проект (или запустить какой-либо инструмент, который также зарегистрирован в проекте).

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

Для больших решений с более чем 20 проектами это значительно упрощает жизнь!

Ответ принят как подходящий

Обычно я создаю папку lib в своем проекте, куда помещаю dll, на которые есть ссылка. Затем указываю ссылку на dll в папке lib. Таким образом, каждый разработчик может построить проект после получения из системы управления версиями.

Если это проект, который был построен на дому, вы также можете добавить этот проект в свое решение.

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

Rob Sobers 22.12.2008 06:47

@ vg1890: несколько копий DLL могут быть преимуществом, это позволит каждому проекту потенциально использовать другую версию DLL.

PaulG 11.11.2009 17:08

Я рекомендую GAC наряду с управлением версиями. Таким образом, используя предварительно созданное событие, вы можете установить эту DLL из общего репозитория в свой GAC.

Saeed Neamati 16.12.2012 18:44

Я думаю, что сейчас предпочтительнее хранить артефакты извне и включать их во время компиляции, используя что-то вроде Artifactory, NuGet, Maven и так далее.

Giulio Caccin 15.07.2019 18:38

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

Добавление ссылки на DLL по полному пути будет ошибкой разработчика, так же как добавление исходного файла по полному пути будет ошибкой.

Вы возвращаете свои двоичные файлы в систему контроля версий исходного кода?

grepsedawk 22.12.2008 06:44

Нет, не мои собственные двоичные файлы. Я предположил, что исходный вопрос касается какой-то сторонней DLL, которая не была построена вместе с проектом.

Greg Hewgill 22.12.2008 06:55

Хорошо, это имеет больше смысла. То же самое мы делаем со сторонними библиотеками.

grepsedawk 22.12.2008 07:01

Практическое правило: если проект не является частью решения, ссылайтесь на выпущенные библиотеки DLL из каталога / binshare или / lib, контролируемого исходным кодом, который находится в дереве управления исходным кодом вашего решения. Все внешние зависимости должны иметь версионные библиотеки DLL, которые находятся в этом каталоге / binshare.

Я понимаю, что ваш коллега делает с точки зрения удобства. Однако подход этого разработчика диаметрально противоположен правильному управлению конфигурацией / сборкой.

Пример: если вы используете блок приложения MS Data в качестве зависимости в своем приложении, вы должны ссылаться на правильно выпущенный двоичный файл, вместо того, чтобы получать последнюю версию из исходной магистрали разработчика MS.

Ваше первое предложение написано на английском? :) Может быть, какие-нибудь запятые или союзы помогут мне это понять?

Patrick Szalapski 30.10.2009 22:25

Я думаю, что этот подход прямо противоположен тому, что я считаю лучшей практикой. Я думаю, что было бы намного лучше, если бы сторонние двоичные файлы не попадали в исходный репозиторий и ссылались на них через что-то вроде репозитория Maven в процессе сборки. Помещение dll в исходный репозиторий излишне раздувает содержимое репозитория и приводит к тому, что получение проектов занимает значительно больше времени, чем необходимо. Это также делает независимое управление версиями сторонних двоичных файлов запутанным, поскольку не ссылается на версию по имени, а скорее подразумевает ссылку на dll конкретной версии, хранящейся в папке lib проектов.

Почему бы не создать частный NuGet-канал? Таким образом, существует только одна копия зависимости (репозиторий NuGet), и несколько проектов могут ссылаться на нее. Могут сосуществовать несколько версий зависимости, и при необходимости каждый проект может ссылаться на другую версию. Кроме того, TFS Build может восстанавливать пакеты во время сборки.

Настройка VS: https://www.visualstudio.com/en-us/docs/package/nuget/consume

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