Все потоки
Поиск
Написать публикацию
Обновить
261.8

C# *

Объектно-ориентированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Служба Windows на C# в .Net 9 (Telegram.Bot)

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров7.7K

После перехода Microsoft с .NET Framework на .NET Core программирование на C# стало более увлекательным, хотя некоторые аспекты изменились.

В частности, шаблон проекта Служба Windows (.NET Framework) создаёт класс, наследник от ServiceBase в пространстве имен System.ServiceProcess. Прогеру предлагается  реализовать виртуальные методы базового класса OnStart и OnStop, которые задают действия, подлежащие выполнению при запуске (остановке) службы, что собственно и есть суть и назначение Службы Виндовз. Регистрация Службы в этом случае производится с помощью утилиты installUtil.exe, в .Net Core это делается утилитой SC.exe.

Реализовать службу на .NET Core (в моем случае .NET 9) не сложнее, но по другому, шаблон проекта теперь называется Worker Service (Microsoft), а рабочий класс наследуется от BackgroundService.

В этой статье я подробно опишу процесс создания, публикации и регистрации Службы в .Net 9 на примере службы для Telegram-бота (сокращенно — Телебот). Почему бот? Во-первых, писать Телебота на C# — это действительно приятно. Во-вторых, чтобы обеспечить его круглосуточную доступность на сервере под управлением Windows, логично использовать именно Службу Windows, которая будет поддерживать его работу в фоновом режиме и запускаться может сама при перезагрузке сервера.

В заключении рассмотрим как добавить логирование в стандартный виндовый EventLog и немного обсудим функционал самого Телебота.

Читать далее

Моки, L1 и никакого деплоя. Собираем идеальный .NET-тест для веб-сервиса

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров5.1K
Автотесты, как известно, работа пыльная и ресурсозатратная. А уж если речь идет об интеграционных, то тем более: сначала осуществляешь сборку теста, затем добавляешь его в нужную среду, а потом еще тот самый деплой, подготовка которого может занимать критически много времени… Но будучи SDET-ом, то есть совмещая в себе навыки разработчика, тестировщика и DevOps, я постигаю архитектуру тестов и иногда нахожу интересные решения по ее оптимизации :)



В этой статье расскажу, как тестировать ASP.NET-приложения максимально быстро, не закрывая IDE и вообще не запуская деплой! Покажу, как при таком подходе создавать не только, например, тесты REST API, но и веб-тесты с использованием Selenium или Playwright. Объясню, что такое TestServer и WebApplicationFactory на конкретных примерах, и продемонстрирую, как с ними можно работать!

Статья будет максимально полезна тем, кто так или иначе уже погружен в непростой мир .NET и C# (и не утонул в нем). Для вас это готовый туториал по интеграции всех этих инструментов! Впрочем, это у нас в компании широко используются .NET и «шарпы» — но даже если ваши тесты пишутся не на C#, все равно рекомендую пробежаться по моей статье! Уверен, вы сможете почерпнуть для себя пару хороших идей, ведь все описанное ниже можно реализовать и на других языках программирования.
Читать дальше →

Проблемы при использовании разделенных запросов в Entity Framework Core 8

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров2K

Недавно во время обновления Entity Framework Core (далее — EFC) с версии 2 до версии 8 мы столкнулись с проблемами при использовании разделенных запросов. Эти проблемы могли оставить часть сотрудников без обедов. Спешу ими поделиться.

Читать далее

Как пройти собеседование на Unity-разработчика: мнение лида

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров5.4K

Привет, читатель! Вот уже три года я провожу собеседования на позиции Unity-разработчиков. За это время я просмотрел более 500 кандидатов на позиции мидла и сеньора, провёл свыше 100 интервью и нанял более 20 Unity-разработчиков. Этот опыт помог мне выявить множество "зелёных" и "красных" флагов, которые помогают определить подходящих кандидатов.

Эта статья будет полезна всем Unity-разработчикам — от Junior до Senior, а также лидам, которые проводят собеседования.

Читать далее

Создание Paint Dot Net плагина на C#/CodeLab для ЧБ дизеринга Jarvis Judice Ninke

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров1.4K

Если вы фанат такой нелепой программы как Paint net, где отсутствуют бинды на горячие клавиши и прочие удобства современных редакторов, то эта статья для вас! Здесь вы узнаете как бесплатно создавать плагины с помощью CodeLab на языке C# и подготовить их к релизу.

Читать далее

Как одна строка может положить приложение? Поиск проблем и уязвимостей в ScreenToGif

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров1.8K

ScreenToGif — полезное приложение, позволяющее сделать из записи экрана или веб-камеры gif-файл, который можно удобно отредактировать во встроенном редакторе. В этой статье мы рассмотрим интересные проблемные места в исходном коде проекта и расскажем, как одна маленькая ошибка может нарушить работу всей программы.

Читать далее

Непрямой контроль за изменениями в производительности приложения через генерируемый SQL и его характеристики

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров2.4K

Привет, Хабр! В настоящее время используются не только SQL решения для работы с данными, тем не менее, на долю SQL приходится значительная часть систем. Также нередко бывает, что приложение генерирует SQL в зависимости от действий пользователя, например, при выборе полей или применении фильтров в отчетах, иными словами, есть динамический SQL, а не статический. Также часто для приложения есть тесты, например, соответствующие типичным активностям пользователей, и каждой активности соответствует один или несколько SQL, причем в тестах проверяется именно правильность результатов выполнения SQL.

Далее, для относительно сложных вариантов генерации SQL при изменениях бизнес-логики (или других изменениях) может измениться и сам динамически генерируемый SQL, причем результаты выполнения SQL могут остаться неизменными, однако производительность поменяется. В таких случаях изменения в производительности можно уловить при помощи бенчмарков, однако прогон бенчмарков может занимать значительное время, в связи с этим актуальна задача быстрого анализа изменений в производительности динамически генерируемого SQL. Интересны особенности анализа производительности приложения на основе SQL — добро пожаловать под кат :)

Читать далее

Task изнутри: управление потоками в .NET и создание своих планировщиков

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров7.3K

Привет, Хабр! Сегодня поговорим о том, как работают задачи в .NET, зачем может понадобиться собственный TaskScheduler и как его реализовать.

Читать далее

Интеграционные тесты для ASP.NET Core

Уровень сложностиСредний
Время на прочтение48 мин
Количество просмотров7.6K

Интеграционные тесты, написанные программистом — это отличный способ обеспечить уверенность в своём веб-сервисе.

В мире .NET для разработки веб-сервисов обычно используют ASP.NET Core, но интеграционное тестирование часто упускают из виду либо делают не очень качественно.

Статья покажет полноценный подход к организации интеграционных тестов на языке Gherkin для API-сервиса, написанного на C# 12 с ASP.NET Core 8 и использующего PostgreSQL.

Читать далее

Простая настройка CI/CD для Фронтенда и Бэкенда в Github без сторонних инструментов бесплатно в 2024 году

Уровень сложностиПростой
Время на прочтение17 мин
Количество просмотров14K

Всем привет! Недавно решил попробовать, что из себя представляет Flutter Web, подумал, может попробовать сделать бота для Telegram, и заодно настроить простейший CI/CD для отдельного фронтенд- и бэкенд-проектов. Однако в интернете я не нашёл простой и исчерпывающей инструкции или процесса.

Поэтому задача этой статьи — решить эту проблему! Сделать автоматическую сборку, тестирование и деплой на сервер, и всё это — без необходимости городить SSH-ключи, Github-токены и подключать сторонние решения. Всё на минималках, без лишней бюрократии.

Читать далее

Как сделать Unit-тестирование в .NET проще и интереснее?

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров6.5K

Сегодня мы поделимся неожиданным решением, которое перевернуло наше представление о тестировании в C# проектах. Скажем только одно: мы кое-что позаимствовали у фронтендеров — и это избавило нас от проблем с тестами навсегда. Что за трюк? Читайте дальше!

Читать далее

Лента Мёбиуса, биомеханические прыжки, мягкие посадки и PD-контроллер

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров1.3K

Продолжаю описание внутреннего устройства шаблона 3D-игры с ходьбой по ленте Мёбиуса.

В прошлой статье рассмотрена генерация самой ленты Мёбиуса и расчет вектора локальной гравитации. Если есть гравитация, значит, есть прыжки и падения. Их и рассмотрим.

Идём прыгать на ленте Мёбиуса!

Тюним запросы в EF Core с помощью интерсепторов

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров5K

Entity Framework обладает достаточно богатым встроенным языком запросов, позволяющим решать широкий спектр задач. Но бывают ситуации, когда либо сгенерированные с его помощью запросы оказываются недостаточно оптимальными, либо возможности EF покрывают не весь спектр функционала базы.

В этом случае приходится либо генерировать запросы вручную (напрямую, либо с помощью хранимых процедур), либо прибегать к дополнительной обработке сгенерированных запросов с помощью механизма интерсепторов. Рассмотрим работу этого механизма подробнее.

Читать далее

Ближайшие события

Загрузка и обработка видеофайлов посредством Minio, REST и FFmpeg

Уровень сложностиСредний
Время на прочтение22 мин
Количество просмотров3.7K

Всем привет! Меня зовут Павлов Денис, я .NET backend разработчик в компании DD Planet. 

В статье расскажу о реализации загрузки и обработки видеофайлов с использованием Minio в качестве хранилища и FFmpeg для обработки видео.

Читать далее

Контур + GFS = Kanso. История развития файловой системы

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров2.8K

Привет! Я Антон, работаю в команде базовой инфраструктуры Контура и занимаюсь развитием распределенной системы хранения данных Kanso. Это наш форк GFS (Google File System). Мы развиваем Kanso уже более 15 лет, в статье я расскажу про это подробнее.

Читать далее

Нафига козе баян? (Мне не сдались такие программисты)

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров59K

Я обычно не люблю затрагивать общие вопросы, но на работе недавно столкнулся с очень специфичной ситуацией, которой хочу поделиться с вами. Касается она нового человека, которого в 2024 наняли свеженьким, из колледжа.

И тут понеслась... Такого я себе даже в страшном бреду представить не мог.

Пойдём, покажу...

Что нового в .NET 9?

Время на прочтение5 мин
Количество просмотров20K

.NET 9 вышел в релиз, и значит, можно начинать переносить свои проекты на новую версию. В этой статье мы рассмотрим новые улучшения и фишки .NET: C# 13, производительность, BuildCheck, GC, LINQ, NuGet Audit и прочее.

Читать далее

Unity .NET и Mono — галопом по компонентам

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров3.1K

Полистал курсы от коробок навыков, мозгов гика и даже Великого Романа Сакутина и не нашел ответа на дефолтный вопрос с джуновых собеседований: "Что же такое .NET, Mono, компилятор, рантайм и прочие ругательства"...

Что же это такое...

.NET Digest #4

Время на прочтение5 мин
Количество просмотров3.7K

Добро пожаловать на четвёртый выпуск нашего дайджеста, посвящённого новостям и событиям в мире .NET! В этот раз набралось множество новостей, и команда PVS-Studio рада представить вам подборку самых интересных и полезных материалов. Поехали!

Читать далее

Refit в .NET: обзор библиотеки для упрощения работы с REST API

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров7.5K

В этом обзоре мы познакомимся с библиотекой Refit для .NET, которая значительно упрощает работу с REST API.

Refit позволяет разработать типобезопасные http клиенты с использованием интерфейсов и атрибутов, что делает код более читаемым и удобным для сопровождения.

Читать далее

Вклад авторов