Почему и когда я должен когда-либо использовать файлы .sln?

#c# #solution

#c# #решение

Вопрос:

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

Еще одна вещь, которую я заметил, это то, что вы можете запустить файл .sln, но что происходит, когда файл выполняется? Что он только что сделал?

Итак, мой главный вопрос: зачем хранить несколько проектов в одном файле .sln, а не просто выполнять всю работу в одном проекте?

Комментарии:

1. «Еще одна вещь, которую я заметил, это то, что вы можете запускать .sln» — вы имеете в виду выполнение сборки из файла sln? Вы не можете «запустить» файл sln, это просто текстовый файл.

2. Часто требуется создавать несколько проектов в определенном порядке. (например, A.csproj зависит от B.csproj)

3. @PrestonGuillot О, хорошо, я просто имею в виду, что в Visual Studio, когда я дважды щелкаю по файлу .sln, появляется панель загрузки, поэтому я предполагаю, что что-то происходит, но не совсем уверен, что он только что сделал.

4. @AloisKraus Я должен спросить, почему у вас> 1000 проектов в одном решении. Самое большее, что я когда-либо видел в реальном приложении, было 97, и это было чудовищно. (У него также была привычка к сбою VS)

5. Да, с этим есть проблемы. Эти решения нельзя открыть с помощью VS, но msbuild может их просто скомпилировать. x86 msbuild может создавать решения до 500 решений до исчерпания памяти, потому что основной msbuild собирает все журналы перед отправкой их в TFS. Такие чудовищные решения можно использовать только для массовых параллельных сборок. На самом деле я генерирую их на лету именно для этой цели.

Ответ №1:

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

  • Разные проекты могут иметь разные зависимости (либо зависимости от других проектов в вашем решении, либо, как правило, зависимости от сторонних библиотек DLL).
  • Разные проекты могут быть разных типов — консольное приложение, dll, веб-сервис и т.д.
  • Разные проекты могут иметь разные этапы до / после сборки
  • Некоторые из ваших проектов могут даже не быть реализованы на C #. У вас может быть c , VB.net , и т.д., проекты также в том же решении.
  • Различные проекты могут быть компонентами, которые повторно используются различными другими командами.
  • много других причин

Таким образом, имеет смысл иметь возможность группировать несколько проектов вместе, чтобы вы могли открыть всю группу, нажать compile, чтобы скомпилировать все проекты в соответствующем порядке (что может быть важно, если, например, один из ваших проектов создает dll, которая требуется другому проекту в качестве зависимости)затем запустите любой из них, который вы укажете.

Когда вы открываете решение, это все, что оно делает: открывает каждый из проектов, содержащихся в решении, в одном окне Visual Studio вместе с метаданными о том, как скомпилировать решение, какой проект должен быть запущен при нажатии кнопки Выполнить и т.д.

Ответ №2:

Дело в том, что по мере написания все более и более сложных приложений вы увидите, что эти сложные приложения нужно будет разбивать на части. Например, у вас может быть приложение, которое обращается к базе данных. Проект базы данных может быть отдельным. Причина в том, что вы можете захотеть использовать эту базу данных с другим приложением. Если API уровня данных не был отдельным, вы не могли бы этого сделать.

Есть несколько причин иметь несколько проектов. Вот несколько:

  1. Возможность повторного использования кода. Возможно, вы разработали какой-то код, который хотите упаковать в библиотеку и использовать в других программах в будущем.
  2. Простота. Иногда при создании сложного приложения вам захочется создавать архитектуру по частям, чтобы приложение было легче отлаживать в целом.
  3. Конфликтующие языки. Предполагается, что ваше приложение написано на C #, но вы хотите использовать некоторый код, который содержится в VB.NET библиотека. Поскольку проект не может смешивать C # и VB.NET код, ваше решение состоит в том, чтобы создавать разные проекты в одном и том же решении.

Ответ №3:

Цитата из какой-то выдержки из MSDN

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

Решения содержат элементы, которые вам нужны для создания вашего приложения. Решение включает в себя один или несколько проектов, а также файлы и метаданные, которые помогают определить решение в целом. Visual Studio автоматически генерирует решение при создании нового проекта. Visual Studio хранит определение решения в двух файлах: .sln и .suo. В файле определения решения (.sln) хранятся метаданные, которые определяют ваше решение, в том числе:

  • Проекты, связанные с решением.
  • Элементы, которые не связаны с конкретным проектом.
  • Конфигурации сборки, которые определяют, какие конфигурации проекта применять в каждом типе сборки.

Метаданные, сохраненные в файле .suo при создании решения и настройке его свойств, используются для настройки IDE всякий раз, когда решение активно. Например, обозреватель решений отображает папку «Разные файлы» для решения, если вы включите эту опцию, и инструменты, подходящие для типов проектов, включенных в решение, становятся доступными из панели инструментов.

Ответ №4:

Когда вы дважды щелкните файл .sln (решение), он откроет это решение в Visual Studio.

Решение позволяет вам группировать проекты вместе в одном, erm, решении.

Комментарии:

1. Правильно, я понимаю это, но какова цель, когда и почему я когда-либо захочу группировать проекты в один файл???

2. Ну, представьте, что у вас есть n-уровневый проект с веб-сайтом, уровнем доступа к данным, уровнем бизнес-логики. Скорее всего, вы бы сохранили это в одном решении.

3. Зачем вам вообще нужно группировать несколько исходных файлов в один проект?

Ответ №5:

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

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

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

Ответ №6:

Вот конкретный пример:

Если вы разделите часть своей логики из своего проекта на многократно используемую библиотеку, то это будет второй проект (библиотека классов), затем вы можете ссылаться на это из первого проекта по имени, если они содержатся в том же решении. И когда вы запустите свой проект, второй проект будет автоматически перестроен по мере необходимости visual Studio.

Ответ №7:

но зачем мне когда-либо хотеть иметь группу проектов в одном файле?

Потому что вы не программист-любитель, который просто учится программировать и писать приложения, подобные hello world.

В моем основном проекте около 40 проектов, принадлежащих одному приложению. Оболочка, несколько расширений powershell, несколько программ, несколько установщиков. Они принадлежат друг другу и собираются вместе — это одно решение.

Еще одна вещь, которую я заметил, это то, что вы можете запустить файл .sln, но что происходит, когда файл выполняется?

MSBuild создает проекты в соответствии с инструкциями в решении, что еще?

Комментарии:

1. Когда вы нажимаете на файл .sln, он не создается с помощью MS build, он открывает решение в Visual Studio.

2. Он не сказал «нажмите на это», но «я могу запустить». Я воспринял это как ввод msbuild 😉