it-roy-ru.com

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

У меня есть 3 решения, и для решения A требуются встроенные версии dll из решений B и C для компиляции. не возможно объединить это к одному решению ...

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

Я считаю, что это распространенная проблема, но как вы можете связать это? 

39
Simon P

Этот вопрос появился в разных , но связанных , формах. На самом деле существует страница MSDN, которая покрывает это .

То, что вы ищете, это подход с несколькими решениями, похожий на Partitioned Single Solution Model для более крупных систем. Имейте одно решение "все", которое создает все и поддерживает ваши межкомпонентные зависимости. Это то, что вы создаете, когда вам нужно создать решение А. Затем у вас есть отдельные решения, которые включают только компоненты B или C. По сути, у вас все еще будет 3 решения, но вы добавите проекты из решений B и C в решение. A.

29
Greg D

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

Итак, просто «Добавить существующий проект» ко всем решениям, которым нужен проект. Я использую TFS на моем текущем сайте, и, похоже, нет проблем с источником контроля эфира.

4
Paul Redman

Я полагаю, это должен быть уровень проекта, на который вы смотрите. Создайте проекты, содержащиеся в решениях B и C, а затем добавьте ссылки на библиотеки DLL в соответствующие проекты в решении A. 

В Msbuild, если у вас есть группа свойств 

<PropertyGroup>

<SolutionsToBuild>SolutionB</SolutionsToBuild>
<SolutionsToBuild>SolutionC</SolutionsToBuild>
<SolutionsToBuild>SolutionA</SolutionsToBuild>
</PropertyGroup>

Затем выполните задачу MSBuild 

<MSBuild Projects="@(SolutionsToBuild)"/>

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

3
Dean

Вы можете попробовать автоматизировать процесс слияния, чтобы сэкономить время: http://code.google.com/p/merge-solutions/

Хотя у нас была немного другая проблема: около 15 решений (всего около 150 проектов), которые использовали одну общую библиотеку. Проблема заключалась в том, что, если бы мы попытались объединить их все в один, чтобы реорганизовать/уничтожить избыточный код из общей библиотеки . 1. объединение 15 решений включает в себя много нажатий и ожидания в VS 2. приведенное решение никогда не обновлялось - никто не удосужился обновить его из-за его размера

1
bushed

Вы можете добавить проект Makefile в решение A, которое будет создавать ваши решения B и C (например, с использованием msbuild) и сделать все проекты в A зависимыми от этого проекта Makefile. Таким образом, вы не сможете добавлять ссылки на проекты в проекты на B и C, но вы можете использовать ссылки на dll, и они всегда будут создаваться из последних источников.

0
Juozas Kontvainis

Вы можете попытаться добавить команды построения командной строки для dll (в решениях B и C), от которых вы зависите в событиях предварительной сборки ваших проектов (в решении A)

0
Brann

Если вы не можете поместить проекты B и C в то же решение, что и проект A, то нет никакого способа убедиться, что у вас есть двоичные файлы для B и C, содержащие последний исходный код, при создании проекта A.

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

Не идеальное решение, но с ним довольно легко работать.

0
user16324

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

Это очень удобно для использования, потому что процесс сборки будет выводить прогресс сборки (аналогично окну вывода в Visual Studio) в команду повтора для каждой выполняемой сборки.

Кроме того, в случае, если вам нужно построить одно решение раньше другого, вы можете написать свой собственный порядок сборки, например:

  1. построить решение B
  2. построить решение C
  3. построить решение A (в котором используются встроенные файлы "решения B" и "решения C")

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

С уважением.

0
Eido95