Евгений Колесников 11 ماه پیش
والد
کامیت
ca74ee35eb
5فایلهای تغییر یافته به همراه17 افزوده شده و 29 حذف شده
  1. 17 29
      articles/t7_dll.md
  2. BIN
      img/dll_01.png
  3. BIN
      img/dll_02.png
  4. BIN
      img/dll_03.png
  5. BIN
      img/dll_04.png

+ 17 - 29
articles/t7_dll.md

@@ -18,9 +18,9 @@
 
 <!-- https://metanit.com/sharp/tutorial/14.3.php -->
 
-* [Создание](#Создание)
-* [Подключение](#Подключение)
-* [Динамическая загрузка сборок и позднее связывание](#Динамическая-загрузка-сборок-и-позднее-связывание)
+* [Создание](#создание)
+* [Подключение](#подключение)
+* [Динамическая загрузка сборок и позднее связывание](#динамическая-загрузка-сборок-и-позднее-связывание)
 
 Нередко различные классы и структуры оформляются в виде отдельных библиотек, которые компилируются в файлы **dll** и затем могут подключать в другие проекты. Благодаря этому мы можем определить один и тот же функционал в виде библиотеки классов и подключать в различные проекты или передавать на использование другим разработчикам.
 
@@ -28,30 +28,27 @@
 
 1. Возьмем имеющийся проект приложения .NET, например, созданный в прошлых темах. 
 
-    ![](../img/rider_dll_01.png)
-
     Запомним какую платформу (**.NET Core** или **.NET Framefork**) и версию .NET используем. 
 
     Например, в моем случае **.NET Core** версии `net8.0`
 
 
-1. В структуре проекта нажмем правой кнопкой на название решения и далее в появившемся контекстном меню выберем **Add -> New Project...**
-
-    ![](../img/rider_dll_02.png)
+1. В структуре проекта нажмем правой кнопкой на название решения и далее в появившемся контекстном меню выберем **Добавить -> Создать проект...**
 
-1. Далее в списке шаблонов найдем пункт **Class Library**. Будьте внимательны, в списке шаблонов несколько вариантов "Библиотек классов" под разные платформы. Создаваемая библиотека классов должна соответсвовать платформе и версии проекта, к которому её планируется подключать:
+1. Далее в списке шаблонов найдем пункт **Библиотека классов (Майкрософт)**. Будьте внимательны, в списке шаблонов несколько вариантов "Библиотек классов" под разные платформы. Создаваемая библиотека классов должна соответсвовать платформе и версии проекта, к которому её планируется подключать:
 
-    ![](../img/rider_dll_03.png)
+    ![](../img/dll_01.png)
 
+1. В окне настройки можете задать имя проекта (обычно оно прописано в ТЗ)
 
-1. После создания проекта он появится в решении, в моем случае с названием `ClassLibrary1`:
+    ![](../img/dll_02.png)
 
-    ![](../img/rider_dll_04.png)
+1. После создания проекта он появится в решении, в моем случае с названием `ClassLibrary1`
 
 1. По умолчанию новый проект имеет один пустой класс **Class1** в файле `Class1.cs`. Мы можем этот файл удалить или переименовать, как нам больше нравится.
 
     ```cs
-    namespace ClassLibrary;
+    namespace ClassLibrary1;
 
     public class Class1
     {
@@ -72,21 +69,21 @@
     >
     >IDE может создать класс без модификатора **public** - установите его, иначе не сможете использовать этот класс в других проектах.
 
-    Теперь скомпилируем библиотеку классов. Для этого нажмём правой кнопкой на проект библиотеки классов и в контекстном меню выберем пункт **Build Selected Projects**.
+    Теперь скомпилируем библиотеку классов. Для этого нажмём правой кнопкой на проект библиотеки классов и в контекстном меню выберем пункт **Собрать**.
 
-    После компиляции библиотеки классов в папке проекта в каталоге `bin/Debug` мы сможем найти скомпилированный файл ***dll*** (`ClassLibrary.dll`).
+    После компиляции библиотеки классов в папке проекта в каталоге `bin/Debug/net8.0` мы сможем найти скомпилированный файл ***dll*** (`ClassLibrary1.dll`).
 
-    ![](../img/rider_dll_05.png)
+    ![](../img/dll_03.png)
 
 ## Подключение
 
-Подключим созданную библиотеку классов в основной проект. Для этого в основном проекте нажмем правой кнопкой на **Dependencies** (Зависимости) и в контекстном меню выберем пункт **Reference...**:
+Подключим созданную библиотеку классов в основной проект. Для этого в основном проекте нажмем правой кнопкой на **Зависимости** и в контекстном меню выберем пункт **Добавить ссылку на проект**:
 
-Далее нам откроется окно для добавления зависимостей. Если Вы всё сделали правильно (библиотека находится в том же решении) то в этом будет пункт **Projects** со списком проектов в решениии, среди которых будет ваша библиотека (в моём случае `<ClassLibrary1>`).Поставим отметку рядом с нашей библиотекой.
+Далее нам откроется окно для добавления зависимостей. Если Вы всё сделали правильно (библиотека находится в том же решении) то в этом будет пункт **Проекты** со списком проектов в решениии, среди которых будет ваша библиотека (в моём случае `ClassLibrary1`). Поставим отметку рядом с нашей библиотекой.
 
-![](../img/rider_dll_06.png)
+![](../img/dll_04.png)
 
-Если наша библиотека вдруг представляет файл **dll**, который не связан ни с каким проектом в нашем решении, то с помощью кнопки **Add From** мы можем найти местоположение файла **dll** и также его подключить.
+Если наша библиотека вдруг представляет файл **dll**, который не связан ни с каким проектом в нашем решении, то с помощью кнопки **Обзор** мы можем найти местоположение файла **dll** и также его подключить.
 
 После успешного подключения библиотеки в главном проекте изменим код, чтобы он использовал класс **Person** из библиотеки классов:
 
@@ -100,8 +97,6 @@ var tom = new Person {
 Console.WriteLine(tom.name);
 ```
 
-![](../img/rider_dll_07.png)
-
 Такое подключение библиотек назвается статическим.
 
 ## Динамическая загрузка сборок и позднее связывание
@@ -110,11 +105,6 @@ Console.WriteLine(tom.name);
 
 Но также мы можем сами динамически подгружать другие сборки, на которые в проекте нет ссылок.
 
->Чтобы не делать новых библиотек, мы можем удалить ссылку на уже добавленную:
->
->![](../img/rider_dll_08.png)
-
-
 Для управления сборками в пространстве имен **System.Reflection** имеется класс **Assembly**. С его помощью можно загружать сборку, исследовать ее.
 
 Чтобы динамически загрузить сборку в приложение, надо использовать статические методы *Assembly.LoadFrom()* или *Assembly.Load()*.
@@ -178,8 +168,6 @@ Process finished with exit code 0.
 
 #### Получение типа
 
-
-
 Чтобы управлять типом и получать всю информацию о нем, нам надо сперва получить данный тип. Это можно сделать тремя способами: с помощью ключевого слова **typeof**, с помощью метода *GetType()* класса **Object** и применяя статический метод *Type.GetType()*.
 
 * Получение типа через **typeof**:

BIN
img/dll_01.png


BIN
img/dll_02.png


BIN
img/dll_03.png


BIN
img/dll_04.png