Perforce, проекты совместно используются несколькими решениями - PullRequest
0 голосов
/ 20 января 2009

UPDATE

Так что получается, что мы могли найти ошибку в Visual Studio 2003 (я знаю ... не удивительно). Мы выяснили, что если решения добавлялись в репозиторий с помощью Visual Studio (с использованием Add Solution to Source Control), все прошло нормально ... пойди разберись.


Таким образом, мы преобразуем наш репозиторий VSS (если это можно так назвать) в Perforce, и у нас возникают проблемы с проектами, включенными в несколько решений.

Наш репозиторий может выглядеть так ...

  • // Depot
    • DevMain
      • Solution1
        • Project1 (Сборка в DLL)
      • Solution2 (имеет Project1 в качестве ссылки на проект)
        • Проект2
      • Solution3 (Имеет Project1 в качестве ссылки на проект)
        • Project3

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

Лучше всего просто собрать Project1 в DLL и сохранить его в папке Lib? Или есть лучший способ?

Спасибо.

Ответы [ 4 ]

1 голос
/ 04 марта 2009

У нас была похожая проблема, и мы подошли к ней очень похоже на то, что @Toby Allen упоминает в своем ответе через спецификации клиента. Однако со временем это становится очень болезненным (настройка нового члена команды становится все более и более трудной, поскольку спецификации клиентов становятся все более и более запутанными; автоматизация также становится намного более сложной, поскольку все ... "в движении" :-)).

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

//depot
    /products
        /(product_name)
            /doc
            /lib
                /(3rd_party_libname)
                    (DLLs)
                /(another_3rd_party_libname)
                    (DLLs)
            /src
                /Project1
                    (files, csproj, vbproj, etc)
                /Project2
                    (files, csproj, vbproj, etc)
                /Project3
                    (files, csproj, vbproj, etc)
            Solution1.sln (includes src/Project1)
            Solution2.sln (includes src/Project1, src/Project2)
            Solution3.sln (includes src/Project1, src/Project3)
        /(another_product_name)
            /doc
            /lib
            /src
            (solutions)
    /shared
        /(shared_lib_name)
            /doc
            /lib
            /src
            (solutions)
        /(another_shared_lib_name)
            /doc
            /lib
            /src
            (solutions)

Обратите внимание, что одна и та же структура повторяется по всей структуре (doc / lib / src / solutions). Lib содержит «внешние» библиотеки - сторонние библиотеки, которые включены в ссылки на проекты. Src содержит плоский список всех проектов, которые являются частью определенного продукта. Решения затем используются для «объединения» проектов любым количеством способов. Я считаю каталог src контейнером с «тем, что доступно», затем решения выбираются из этого контейнера и объединяют проекты (по мере необходимости).

Библиотеки, которые совместно используются несколькими продуктами, попадают в общий каталог. Попав в общий каталог, они рассматриваются как независимые от продуктов - у них свой цикл выпуска и они никогда не присоединяются к продуктам в качестве источника. Разделяемые библиотеки объединяются в продукты путем разветвления сборок / сборок выпусков совместно используемых библиотек в каталог lib -> продукта -> с точки зрения продукта нет разницы между сторонней библиотекой и разделяемой библиотекой. Это позволяет нам контролировать, какой продукт использует какую версию совместно используемой библиотеки (когда продукту нужны новые функции, он должен явно переходить в более новую версию совместно используемой библиотеки, как если бы он включал новый выпуск сторонней библиотеки, со всеми плюсами и минусами, которые идут с этим).

Таким образом, наша структура имеет концепцию двух «типов» разделяемых библиотек:

  • проекты, локальные для продукта, используемые несколькими решениями (включены в плоский список проектов в каталоге src, на них могут ссылаться несколько решений)
  • проекты, используемые несколькими продуктами (добавляются в общий каталог, рассматриваются как сторонние библиотеки с выпусками, независимыми от продуктов)
0 голосов
/ 21 января 2009

Я не знаю много об использовании Visual Studio с Perforce, но вы можете рассмотреть возможность создания представлений рабочей области, которые отображают Project1 в Solution2, Solution3 и т. Д., Где это необходимо.

0 голосов
/ 23 января 2009

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

Client: Client_Solution2

Description:
Created by Me.

Root:   C:/Development/Solutions

View:
//depot/Devmain/Solution1/... //Client_Solution2/Solution2/Solution1/...
    //depot/Devmain/Solution2/... //Client_Solution2/Solution2/...

Это даст вам структуру, где Solution1 является подкаталогом решения 2.

0 голосов
/ 20 января 2009

Решение должно состоять в том, чтобы перепривязывать Solution1 к серверу контроля версий каждый раз, когда он добавляется в новый проект. (Он находится в File-> Source Control-> Change Source Control.)

Это должно быть сделано только один раз для каждого рабочего стола для решения.

...