Совместное использование файлов csproj между решениями
Я давно в этом разбираюсь и до сих пор не нашел удовлетворительных решений. У нас есть несколько общих библиотек (.csprojs), которые также зависят друг от друга, а также от сторонних библиотек. Я хочу, чтобы эти общие проекты упоминались в нескольких файлах.sln.
В прошлом мы пытались сделать эту работу с NuGet. Мы сделали все наши пакеты общих компонентов и имели местный канал. Однако, когда мы хотели обновить наши общие компоненты, это часто приводило к ошибкам в процессе обновления и было ненадежным. Это вызывает у нас больше головных болей, чем стоит, и, честно говоря, мы не хотим добавлять общий код в наши разделяемые библиотеки.
Итак, теперь я считаю, что лучше иметь ссылку на общий проект в каждом решении, это достаточно просто, но теперь есть еще одна проблема:
Мы используем функцию разветвления, и общий код не является частью ветви. У нас есть структура, похожая на следующую:
/App1 /Development (Folder that just contians Main branch) /Main /Features (Folder that contains all Features) /F1 /App2 /Development /Main /Features /F1 /F2 /Shared /Development /Main
Однако, если мы вносим изменения в общий доступ в какой-либо из функций - и он указывает на код в /Shared/Development/Main, то он просто обновляется для всех моих функций, и мы не храним записи общих изменений.
Как правильно решить эти проблемы? Есть ли лучший способ обмена компонентами между решениями?
1 ответ
Ответьте, что мы пошли для наших проблем:
- Возьмите все общие файлы.csproj и поместите их в свой собственный файл Main (в отдельный общий файл.sln).
- Затем создайте модульные тесты для каждой библиотеки.
- Укажите все другие решения на использование этих файлов.csproj в качестве ссылок на проекты. Это решения, которые находятся в другой основной или функциональной ветвях, но они всегда будут указывать на общую главную.
- Наконец, настройте определение сборки для сборки / тестирования при регистрации и ночных сборках.
На шаге 4 вы гарантируете, что если кто-то что-то изменит в ваших общих проектах, он будет быстро обнаружен модульными тестами.
Мы все еще можем использовать NuGet в качестве оболочки для вещей, чтобы распространять их среди третьих сторон - но для внутренних изменений этот поток, кажется, работает лучше всего для быстрой разработки / тестирования.