Понятия “Проект” и “Решение” в .NET

На предыдущих уроках мы с вами создали несколько проектов с использованием различных инструментов. В этом уроке рассмотрим структуру проекта: из каких файлов он состоит, и за что они отвечают.

Решение (Solution)

Начнем с того, что самым высокоуровневым понятием в организации исходного кода .NET является “Решение” (Solution) (далее будем использовать этот термин без кавычек). Для изучения Решения откроем в Visual Studio проект DemoApp.

В Visual Studio для получения доступа к структуре Решения нужно перейти на вкладку Solution Explorer:

Настройки Решения находятся в файле с расширением *.sln, в нашем случае это файл DemoApp.sln.

Основное назначение Решения – это группировка проектов, которые связаны определенным образом между собой для решения какой-то задачи, и настройка подходов к сборке проектов (Release/Debug) и платформы, под которую будет выполняться компиляция (x86/x64/Any). В Решение вы можете добавлять проекты и удалять их из него.

Проект (Project)

Проект – это логическая сущность, которая представляет собой объединение набора файлов, использующихся для сборки некоторой единицы: dll-библиотеки, исполняемого exe-файла, web-сайта, мобильного приложения и т. п.

Проект DemoApp состоит из двух файлов:

  • DemoApp.csproj – конфигурационный файл проекта;
  • Program.cs – файл с исходным кодом.

Для добавления Проекта в Решение, можно воспользоваться графическим интерфейсом в IDE либо инструментом командной строки dotnet, с помощью которого мы создали проект DemoApp в предыдущем уроке.

Добавление Проекта в Решение с помощью графического интерфейса в Visual Studio

Начнем с первого варианта: в Visual Studio вызовите контекстное меню для Решения и выберите Add->New Project….

Укажите тип приложения Class Library, и дайте проекту имя DemoLib. В результате в структуре Решения появится ещё один проект с указанным именем.

В файловой системе будет создан каталог с соответствующим именем и содержанием.

Добавление Проекта в Решение с помощью утилиты dotnet

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

$ mkdir DotnetApp
$ cd DotnetApp

Создайте в нем два проекта.

$ dotnet new console -o DotnetApp
$ dotnet new classlib -o DotnetAppLib

В результате в DotnetApp будет создано дополнительно два каталога, имена которых совпадают с именами созданных проектов. Объединим созданные проекты в одно Решение, для этого предварительно создадим его.

$ dotnet new sln --name DotnetApp

В каталоге DotnetApp появится файл DotnetApp.sln.

Теперь добавим в него наши проекты.

$ dotnet sln add DotnetApp\DotnetApp.csproj
$ dotnet sln add DotnetAppLib\DotnetAppLib.csproj

После выполнения каждой из этих команд в консоли должно быть выведено сообщение:

Проект "[ИмяПроекта].csproj" добавлен в решение.

Если вы откроете полученный, в результате всех этих действий, файл Решения в Visual Studio, то увидите следующую структуру:

Самый простой способ задать настройки проекта – это открыть файл конфигурации (он имеет расширение *.csproj) и внести в него необходимые изменения.

Файл проекта DemoApp представлен ниже.

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>

Параметры в файле объединяются по группам. В каждом проекте есть группа <PropertyGroup> ... </PropertyGroup>, в которой задаются свойства проекта. Также, скорее всего, вы встретите группу <ItemGroup> ... </ItemGroup>, через неё к проекту добавляются ссылки на другие проекты из тех, что доступны локально или из репозитория NuGet.

Рассмотрим настройки DemoApp, которые выставляются по умолчанию для проекта типа “Console Application”:

  • OutputType — тип приложения, который будет получен в результате сборки, в нашем случае — это исполняемый файл с расширением *.exe.
  • TargetFramework — фреймворк, под который будет собрано приложение. Этот фреймворк должен быть развернут на машине, на которой приложение будет запускаться .
  • ImplicitUsings — использование неявного using’а. Об этом мы поговорим более подробно, когда пройдем тему “Пространства имен”.
  • Nullable — активация или деактивация проверок того, что переменные не могут иметь значение null. Этот момент тоже обсудим позже.

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

Ещё один способ получить доступ к настройкам проекта – выбрать в контекстном меню проекта в Visual Studio пункт Свойства (Properties), в результате откроется окно:

Если Вы хотите больше узнать про язык C#, приглашаем Вас на наш курс “C#. Базовый уровень“.

Добавить комментарий

Ваш адрес email не будет опубликован.