На предыдущих уроках мы с вами создали несколько проектов с использованием различных инструментов. В этом уроке рассмотрим структуру проекта: из каких файлов он состоит, и за что они отвечают.
Понятия “Проект” и “Решение” в .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, то увидите следующую структуру:
Настройка .NET проекта
Самый простой способ задать настройки проекта – это открыть файл конфигурации (он имеет расширение *.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#. Базовый уровень“.