Нередко различный функционал, который выполняет определенную задачу, оформляется в виде отдельной библиотеки, которая компилируется в файл dll и затем может подключаться в другие проекты. Благодаря этому мы можем определить один и тот же функционал в виде библиотеки классов и подключать в различные проекты или передавать на использование другим разработчикам. Рассмотрим, как создать и подключить библиотеку классов.
Для создания проекта библиотеки классов в .NET CLI команде dotnet new надо передать шаблон classlib:
dotnet new classlib
Например, пусть у нас проект библиотеки классов будет располагаться в папке C:\fsharp\console\ и который будет называться "Messages". Создадим проект:
C:\Users\eugen>cd C:\fsharp\console C:\fsharp\console>dotnet new classlib -lang "F#" -o messages Шаблон "Библиотека классов" успешно создан. Идет обработка действий после создания... Восстановление C:\fsharp\console\messages\messages.fsproj: Определение проектов для восстановления... Восстановлен C:\fsharp\console\messages\messages.fsproj (за 382 ms). Восстановление выполнено. C:\fsharp\console>
После выполнения этой команды будет создан проект с файлом кода Library.fs:
В файле Library.fs определен простейший код:
namespace messages module Say = let hello name = printfn "Hello %s" name
В данном файле определен модуль Say, в котором определена функция hello, которая принимает 1 параметр и выводит на консоль сообщение. Причем сам модуль Say располагается в пространстве имен messages
Мы можем изменить этот код, что-то еще добавить, но в принципе его достаточно для демонстрации работы с библиотекой классов. Для построения этой библиотеки классов перейдем к папке проекта и выполним команду dotnet build:
C:\fsharp\console>cd messages C:\fsharp\console\messages>dotnet build Версия MSBuild 17.8.3+195e7f5a3 для .NET Определение проектов для восстановления... Все проекты обновлены для восстановления. messages -> /Users/eugene/Documents/fsharp/console/messages/bin/Debug/net8.0/messages.dll Сборка успешно завершена. Предупреждений: 0 Ошибок: 0 Прошло времени 00:00:03.71 C:\fsharp\console\messages>
После выполнения команды в проекте в папке bin/Debug/net8.0 мы сможем найти файл messages.dll - файл скомпилированной библиотеки, которую мы сможем подключать в другие проекты.
Теперь подключим эту библиотеку в какой-нибудь проект. Для теста создадим в папке C:\fsharp\console\ новый консольный проект, который пусть называется "helloapp" (то есть в соседней папке по отношению к проекту messages):
C:\fsharp\console>ldotnet new console -lang "F#" -o helloapp Шаблон "Консольное приложение" успешно создан. Идет обработка действий после создания... Восстановление C:\fsharp\console\helloapp\helloapp.fsproj: Определение проектов для восстановления... Восстановлен C:\fsharp\console\helloapp\helloapp.fsproj (за 1,38 sec). Восстановление выполнено. C:\fsharp\console>
Для добавления ссылки одного проекта в другой применяется команда dotnet add reference, которая имеет следующий общий формат:
dotnet add путь_к_файлу_fsproj_главного_проекта reference путь_к_файлу_fsproj_подключаемого_проекта
То есть в данном случае, если я нахожусь в папке проекта helloapp, то подключение библиотеки классов будет выглядеть следующим образом:
dotnet add helloapp.fsproj reference ..\messages\messages.fsproj
Вывод команды
C:\fsharp\console>cd helloapp C:\fsharp\console\helloapp>dotnet add helloapp.fsproj reference ..\messages\messages.fsproj Ссылка "..\messages\messages.fsproj" добавлена в проект. C:\fsharp\console\helloapp>
И если в проекте консольного приложения мы откроем главный файл проекта helloapp.fsproj, то увидим в нем следующие строки:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net8.0</TargetFramework> </PropertyGroup> <ItemGroup> <Compile Include="Program.fs" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\messages\messages.fsproj" /> </ItemGroup> </Project>
Здесь элемент
<ProjectReference Include="..\messages\messages.fsproj" />
как раз подключает в проект библиотеки классов messages. И также подключение проекта библиотеки классов можно было бы сделать вручную, просто изменив данный файл проекта.
После успешного подключения библиотеки в главном проекте helloapp изменим файл Program.fs, чтобы он использовал модуль Say из библиотеки классов:
open messages // подключаем пространство имен Say.hello "Tom" // вызываем функцию hello
Консольный вывод программы:
C:\fsharp\console\helloapp>dotnet run Hello Tom C:\fsharp\console\helloapp>
Если надо удалить ссылку, то аналогичным образом применяется команда
dotnet remove путь_к_файлу_fsproj_главного_проекта reference путь_к_файлу_fsproj_подключаемого_проекта