Visual Studio: как сделать так, чтобы одно решение зависело от другого?

Возможно ли, чтобы решение в VS зависело (т.е. включало) все другое решение? Я видел кое-что о «папках решений», но это не одно и то же....? Спасибо! (Кстати, я использую VS 2008)


person Robert Fraser    schedule 20.07.2009    source источник


Ответы (5)


Этот пост устарел, но в наши дни вы можете легко повторно использовать зависимости в других решениях, создав пакеты nuget для всех из них. VS 2015 имеет встроенную сборку пакетов nuget, но в настоящее время является кандидатом на выпуск. В Visual Studio 2013 вы можете использовать пакет nuget Nuget.Packaging, чтобы разрешить сборку вашего проекта в виде пакета Nuget.

Затем вы можете просто опубликовать новые версии своих пакетов в локальной сетевой папке и настроить ее как репозиторий в Visual Studio.

Тогда проекты вашего другого решения могут зависеть от этого пакета.

Например, предположим, что у вас есть повторно используемая служебная DLL в решении под названием «Core Framework», и вы хотите использовать служебную программу на веб-сайте, который вы создаете в решении под названием «XYZEcosystem».

В решении CoreFramework вы должны создать пакет nuget для служебного проекта, который компилируется в служебную dll и включает dll и ее файл pdb в пакет.

Затем вы публикуете это в своем сетевом ресурсе.

Итак, допустим, ваш пакет имеет идентификатор типа «XYZ.Core.Utilities» с версией 1.0.0.0.

Теперь в XYZEcosystem вы должны использовать консоль диспетчера пакетов, установить раскрывающийся список репозитория в свой репозиторий и ввести «Install-Package XYZ.Core.Utilities», и он установит последнюю версию XYZ.Core.Utilities.

Если вы внесете изменения в XYZ.Core.Utilities, вы можете запустить Update-Package XYZ.Core.Utilities в XYZEcosystem, и он подберет новую версию.

person Ryan Mann    schedule 22.05.2015

Не совсем. Вам нужно будет сделать одно из следующих действий:

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

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

person Sam Harwell    schedule 20.07.2009
comment
Но см. ответ от net_prog - person Jon Coombs; 23.02.2014
comment
Выглядит так на самом деле было возможно в 2009 году. В любом случае, я надеюсь, что в 2015 году ситуация улучшилась. - person jpaugh; 16.06.2017

Посмотрите здесь: https://docs.microsoft.com/en-us/archive/blogs/habibh/walkthrough-adding-an-existing-visual-studio-solution-to-another-solution

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

person net_prog    schedule 02.02.2012
comment
Я проверил, и это все еще работает с VS 2019, но на добавленный файл *.sln не ссылается вышестоящий файл *.sln. Таким образом, любые изменения, внесенные в добавленный файл *.sln, не будут отражены в вышестоящем файле *.sln. Было бы лучше, если бы файлы *.sln могли поддерживать иерархическую связь. - person A. David Ing; 28.01.2021

Решение — это набор сборок, которые собираются для создания исполняемого файла или библиотеки DLL. Зависимость одного решения от другого не имеет смысла. Выходная сборка (исполняемая/dll) зависит от сборок, на которые она ссылается. Если ваше решение зависит от других сборок, укажите их. Вы можете добавить проекты в свое решение (Файл > Добавить > Существующий проект), а затем добавить ссылки на эти проекты из выходного проекта.

person darasd    schedule 20.07.2009

Ты не можешь сделать это. А зачем тебе это?

Просто добавьте в решение все проекты, от которых вы зависите (проекты в «другом» решении).

Затем используйте ссылки на проекты (не ссылки на файлы) между проектами.

person codeape    schedule 20.07.2009
comment
Я хочу зависеть от другого решения, которое я не могу контролировать. Если это решение будет обновлено для включения другого проекта, я хочу, чтобы это автоматически учитывалось. - person Robert Fraser; 20.07.2009
comment
В этом случае либо: Создайте сценарий, автоматически генерирующий файл решения. Или вручную добавьте проекты в свое решение и создайте сценарий, который проверяет наличие всех проектов в решении. Файлы решений — это простые текстовые файлы с довольно простой структурой. - person codeape; 20.07.2009
comment
Было бы желательно, если бы дерево зависимостей было глубоким и сложным, хотя механизм вне VS, который обеспечивает актуальность зависимых dll и их расположение в нужном месте, сэкономит много времени на компиляцию, если эти dll доступны в центральном контролируемом репозитории. - person Denise Skidmore; 31.01.2018