В данной статье, я постараюсь описать, как создать простую библиотеку, куда идти и что нажимать.
Для Гуру C# тут откровений не будет, но если им будет чем дополнить данную статью, думаю все будут только рады.
Для создания своей DLL нам потребуется:
- Visual Studio (у меня VS 2017)
- Directum RX Development Studio
- Прямые руки
- Google.ru или Yandex.ru (по вкусу)
Открываем Visual Studio и создаем свой новый проект
Выбираем "Библиотека классов (.NET Framework)", указываем используемый Framework и заполняем имя проекта. Ждем "Ок".
У меня проект будет называться TestProject.
И так, у меня на рабочем столе в папке TEST, появилась папка TestProject.
Внутри папка с проектом (TestProject) и SLN файл.
*.SLN файл - это файл решения, который содержит помимо GUID-ов путь к проекту.
Если будете переименовывать папку с проектом, нужно будет править и путь в файле решения:
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestProject", "TestProject\TestProject.csproj", "{CB70FF03-CE24-4191-9A75-C6190CFDFE1F}"
В самой папке проекта лежат: *.CSPROJ файл проекта (TestProject.csproj), *.CS файлы классов (у нас пока один Class1.cs), папка Properties (тут лежит файл со сведениями о сборке AssemblyInfo.cs), папка obj с временными файлами и папка bin с результатами компиляции.
Сильно подробно описывать все не буду, в интернете можно более подробнее почитать про структуру проекта и что зачем нужно.
В самой же студии все довольно просто: Решение TestProject, в нем проект TestProject, а в нем по умолчанию созданный Class1.
Давайте для разминки напишем простенькую функцию SummInt(), которая на вход будет принимать 2 числа, суммировать их и возвращать результат.
Попутно я переименовал namespace в MyTestProject (это имя, по которому будет происходить обращение к DLL) и класс в FirstClass.
ВАЖНО: Функция должна иметь модификатор static, иначе в RX мы ее не увидим.
Подробно по уровням доступности и модификаторам можно почитать на MSDN.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MyTestProject
{
public class FirstClass
{
public static int SummInt(int a, int b)
{
var c = a + b;
return c;
}
}
}
В свойствах проекта настраиваем сборку, если это необходимо, сохраняем и собираем проект.
В папке \bin\Debug (путь такой ...\Desktop\TEST\TestProject\TestProject\bin\Debug) появилось 2 файла: наша DLL и файл символов *.PDB (о pdb файлам опять таки можно почитать у Microsoft - Файл символов).
Цитата с stackoverflow: Наличие файлов символов (.pdb
) на клиентской машине может быть полезно тем, что в случае возникновения необработанного исключения при наличии .pdb
файла можно получить более детальный stack trace
.
Итак, давайте смотреть, что же у нас получилось.
Я создал решение TestDLLSolution, модуль ModuleDLL и справочник Databook, для проверки этого хватит.
Подключаем нашу библиотеку в модуле (см. линк на Directum club).
В справочнике Databook создадим кнопку Action и вынесем ее на форму.
Код кнопки такой:
public virtual void Action(Sungero.Domain.Client.ExecuteActionArgs e)
{
// Отправляем в функцию TestProject.dll и выводим результат сложения в диалог
var dllResult = MyTestProject.FirstClass.SummInt1(10, 7);
Dialogs.NotifyMessage(string.Format("Результат сложения 10 + 7 = {0}", dllResult));
}
Обращение к нашей DLL осуществляется по namespace MyTestProject, который мы указали в проекте, далее класс FirstClass и имя функции.
Собственно все собираем, публикуем и запускаем.
При нажатии на кнопку получаем результат сложения 2 чисел.
Поздравляю - Вы прокачались до 20 уровня, получили D Grade на крафт своих библиотек, а значит - Mission complete!
P.S. Рассмотренный пример это лишь первый маленький шажочек к расширению возможностей C# в DirectumRX, ведь еще есть Windows Forms, APS .Net и т.д. и т.п.
P.P.S. To be continued ...
Стоит добавить, что если библиотека будет использоваться в серверном коде, то она может быть собрана под framework 4.6.2. Если в клиентском коде - то framework 4.5 (Это информация бывает полезна, например, когда в своем коде используешь другие библиотеки, определённой версии framework).
Если будет информация про логгирование - стоит добавить заповедь "Не используй NLog" ;)
Дмитрий, А что так ? У меня проблем с NLog пока не возникало. Поделитесь опытом !?
Я использую EasyLog - без проблем
Авторизуйтесь, чтобы написать комментарий