Несколько приложений в одном решении Visual Studio [закрыто]

17

Я работаю для компании, которая хочет объединить все свои .Net-приложения (веб-приложения, приложения Windows и консольные приложения) в одно решение Visual Studio.

Я ищу опыт от разработчиков, которые либо структурируют свои собственные приложения таким образом, либо которые работают в компании, которая делает это. Это хорошая идея?

  • Какие плюсы / минусы заключаются в том, что все ваши приложения объединяются в одно решение, а не имеют отдельные решения для каждого приложения?

  • Как быстро работает Visual Studio с решением более 20 проектов?

  • И насколько стабилен файл решения с параллельной разработкой, управляемой исходным кодом?

BruceHill
источник
Помните, что ответы могут относиться к конкретным версиям Visual Studio.
Stakx

Ответы:

21

Недавно мы перенесли почти весь исходный код моей компании в одно решение.

Почему?

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

Объединение всего кода в одно решение было альтернативой. На данный момент это работает хорошо, и теперь легко понять зависимости. Хотите изменить метод, но также отследить последствия, которые это изменение может иметь где-либо в базе кода? Visual Studio может сделать это с легкостью. Для меня это успех.

Непрерывная интеграция теперь также стала проще. Одно решение для компиляции и развертывания. Почти нечего настраивать.

Это масштабируемое?

Что касается производительности, я был очень удивлен Visual Studio . Я думал, что он начнет плакать с решением, скажем, 50 проектов. На сегодняшний день существует более 200 проектов; Visual Studio оказался достаточно масштабируемым для управления ими, как будто их было всего 20. Да, есть вещи, которые требуют времени. Если вы перекомпилируете каждый проект с контрактами кода, включенным по умолчанию анализом кода и т. Д., Ожидайте, что это займет некоторое время. Но никто не ожидал бы, что скомпилирует 200 проектов так быстро, как 10, и, кстати, вы не должны: это роль сервера непрерывной интеграции. Время запуска (холодный запуск, затем загрузка раствора) очень быстро ; может быть, не так быстро, как с 10 проектами, но все же очень приемлемо (менее 20 секунд на машине, купленной более пяти лет назад).

Чтобы пойти еще дальше, систематически разгрузки проектов является хорошей идеей (и действительно простой, когда проекты организованы в каталогах внутри решения). Если кто-то работает над чем-то, что требует загрузки только трех проектов, нет необходимости загружать все 200 проектов (если, конечно, не могут быть затронуты зависимости).

Контроль версий также работает, как и ожидалось (я использую сервер SVN, если это имеет значение). Я не работал в реальной параллельной среде, скажем, с десятками разработчиков, которые часто пишут код, но я бы предположил, что у этого не будет слишком много проблем. Просто остерегайтесь случаев, когда многие разработчики добавляют новые проекты одновременно: объединить файл .sln не так просто.

Вывод

Если бы мне пришлось выбирать решение снова:

  1. Я все равно перенесу все в одно решение. Это значительно уменьшает боль от сломанных зависимостей, и одно только это преимущество того стоит. Наличие централизованного места для всего кода также хорошая идея; это позволяет, например, искать что-то в Visual Studio. Я также могу работать над двумя слабо связанными проектами, и у меня по-прежнему открыто только одно окно Visual Studio.

  2. Я также хотел бы изучить немного больше NuGet и возможность размещения частного сервера NuGet. Управление зависимостями с помощью NuGet может решить некоторые проблемы, когда вы не хотите объединять несколько проектов в общее решение. Лично у меня не было таких случаев, но я предполагаю, что другие компании могли иметь.

  3. Наконец, инвестирование в SSD для каждого разработчика может иметь огромное значение. Но вам не нужно, и в моем случае кодовая база все еще хранится на обычном жестком диске.

Арсений Мурзенко
источник
2
Несколько замечаний: вы также можете открывать проекты через файл .csproj в VS, если скорость / производительность являются проблемой. «Частный сервер» NuGet - это просто сетевая папка (и добавьте эту папку в качестве исходного местоположения пакета в VS) - просто поместите туда файлы nupkg, и все заработает.
Стивен Эверс
Спасибо, MainMa за то, что поделились своим опытом с единой установкой решения; очень подробный и полезный ответ. У меня есть оговорка, что все приложения должны быть объединены в одно решение - дать начинающему разработчику доступ ко всему. Мы используем Ankhsvn, и я бы лучше дал младшему разработчику URL-адрес для одного приложения, над которым я хочу, чтобы они работали, а не предоставил им доступ ко всему. Есть мысли по этому поводу?
БрюсХилл
@BruceHill: с SVN вы можете точно настроить, у кого есть доступ к чему. Младший разработчик по-прежнему сможет видеть все корневые каталоги (см. Мой вопрос о сбое сервера ), но не сможет получить доступ к закрытым проектам.
Арсений Мурзенко
2
Работая в нескольких крупных компаниях с большими командами разработчиков, ежедневно создающих код, я могу вам сказать, что подход единого решения не работает. Каждый проект накладных расходов. Загрузка, сборка и бог знает, какие шаги до / после сборки кто-то мог прикрепить к указанным проектам. Теперь с большой командой разработчиков у вас будут изменения во многих из этих проектов каждый день. Включите выполнение модульных тестов и т. Д. В каждую регистрацию для непрерывной интеграции, и тогда у вас будет еще больше накладных расходов. Иметь одно решение для каждого развертываемого объекта (службы, веб-сайта) и использовать менеджер пакетов, такой как NuGet.
Всегда
8

Это предполагаемое использование.

Какие плюсы / минусы заключаются в том, что все ваши приложения объединяются в одно решение, а не имеют отдельные решения для каждого приложения?

  • плюсы:
    • более легкие ссылки между проектами
    • легче отлаживать / проходить
    • проще подключить к процессам (т. е. вы переходите через службу Windows, когда она переходит на код разделяемой библиотеки, и это просто работает, потому что все символы уже загружены и учтены)
    • поиск кода внутри ide работает лучше (вам не обязательно знать, в каком проекте находится искомый код)
    • Перекрестные списки изменений проще в управлении (т. е. вы изменили код библиотеки, поэтому необходимо обновить код клиента одновременно с 1 регистрацией)
  • минусы:
    • скорость сборки: если вы привыкли «перестраивать все», сборка занимает больше времени. Гораздо дольше, и инкрементные сборки иногда ведут себя странно.
    • Идеальная скорость: см. далее

Как быстро работает Visual Studio с решением более 20 проектов?

С более чем 20 проектами ... не все так плохо. Я видел больше без VS проблем. Это довольно стабильно / быстро. ОДНАКО ... если это проблема, ее можно устранить: откройте .csproj в VS и работайте оттуда. Вы не получаете преимуществ от наличия всего в одном решении, но вы всегда можете снова открыть sln, когда вам нужно, и работать только с .csproj, когда вам нужно (как вы делаете сейчас).

И насколько стабилен файл решения с параллельной разработкой, управляемой исходным кодом?

Файл решения изменяется только при добавлении / удалении проектов или объектов уровня решения, поэтому он редко изменяется. Это xml, так что вы можете видеть, что в нем. Они меняются редко.

Стивен Эверс
источник
Стив, ты сказал: «Это целевое использование». Можете ли вы предоставить ссылку для этого? Благодарность!
реформирован