Работа с общими / служебными библиотеками

StackOverflow https://stackoverflow.com/questions/41405

  •  09-06-2019
  •  | 
  •  

Вопрос

В компании, в которой я работаю, у нас есть "Утилита" проект, на который ссылается практически любое приложение, которое мы создаем. У него есть много вещей, таких как NullHelpers, ConfigSettingHelpers, Common ExtensionMethods и т. Д.

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

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

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

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

Это было полезно?

Решение

Это именно то, что мы делаем. У нас есть служебный проект, который имеет некоторые не связанные с проектом полезные функции. Мы увеличиваем версию вручную (второстепенно), собираем проект в версии Release, подписываем его и помещаем в общую папку.

Затем люди используют конкретную версию библиотеки .

Если некоторые полезные методы реализованы в некоторых конкретных проектах, которые могут попасть в основной проект Utility, мы помещаем их в специальный вспомогательный класс в проекте и помечаем их как возможного кандидата Utility (простой // TODO). В конце проекта мы просматриваем кандидатов и, если они останавливаются, мы перемещаем их в основную библиотеку .

Срочные изменения запрещены, и мы помечаем методы и классы как [устаревшие], если это необходимо.

Но это не имеет значения, потому что мы увеличиваем версию при каждой публикации.

Надеюсь, это поможет.

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

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

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

Конечно, у нас все еще есть проблемы, о которых вы иногда упоминаете. Но когда одна команда регистрирует изменение, которое нарушает сборку другой команды, это обычно означает, что контракт для этого метода / объекта где-то нарушен. Мы рассматриваем это как возможность улучшить дизайн проекта общих утилит ... или, по крайней мере, написать больше юнит-тестов: /

У меня была EXACT та же проблема!

Раньше я использовал ссылки на проекты, но все кажется плохим, когда, как вы говорите, на него ссылаются многие проекты.

Теперь я компилирую в DLL и устанавливаю для свойства CopyLocal для ссылки DLL значение false после первой сборки (в противном случае я считаю, что это может переопределить подпроекты и просто стать беспорядком).

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top