Отслеживайте наш прогресс и будущие функции. Мы постоянно развиваемся, чтобы предоставить вам лучший опыт разработки.
Автоматическая генерация тестов с поддержкой двух основных уровней:
Модульные тесты:
Создание тестов для отдельных классов и методов, с акцентом на бизнес-логику.
Интеграционные тесты:
Создание тестов для проверки взаимодействия между компонентами, моделируя взаимодействие с базами данных и внешними сервисами.
Lino теперь коммерчески доступен в версии Early Access, что ознаменовало завершение бета-этапа и начало его внедрения в реальных средах разработки.
Все основные функции, запланированные для версии 1.0.0, уже реализованы, что делает продукт полноценным и готовым к практическому использованию.
На этом начальном этапе наш фокус направлен на непрерывное совершенствование — корректировку производительности, улучшение стабильности и мелкие оптимизации, основанные на реальном использовании клиентами.
Те, кто приобретет Lino на этом этапе, получат полный доступ к обновлениям, специализированную техническую поддержку и возможность активно участвовать в развитии продукта до официального релиза версии 1.0.0.
Lino теперь создает проекты, полностью совместимые с .NET 10, укрепляя интеграцию с последней версией платформы Microsoft.
Миграция с .NET 9 на .NET 10 была необходима, чтобы гарантировать, что создаваемые проекты используют последние достижения экосистемы .NET — включая оптимизацию производительности, улучшения времени компиляции, новые возможности C# 13 и улучшенный опыт работы с ASP.NET Core.
Это обновление гарантирует, что весь сгенерированный код готов к будущему платформы, с пересмотренными шаблонами, обновленными настройками Target Framework и скорректированным скэффолдингом в соответствии с новыми стандартами языка и среды выполнения.
Реализована автоматическая генерация файлов .http, чтобы упростить тестирование и документирование REST-эндпоинтов в процессе разработки.
Эта функция позволяет организовывать запросы и легко выполнять их напрямую в совместимых инструментах, ускоряя проверку API и улучшая опыт разработчиков.
Основные преимущества:
_ Автоматическое создание файлов, готовых для тестирования эндпоинтов.
_ Упрощает документирование и обмен примерами запросов.
_ Интегрируется в процесс разработки без дополнительной настройки.
_ Ускоряет проверку API в разных средах.
Добавлена возможность генерировать интеграционные события на основе явного выбора свойств сущности, которые должны составлять событие.
Без этой функции события обычно включали всю сущность или требовали ручного создания специальных DTO, что увеличивало вербозность и могло приводить к раскрытию ненужных данных.
С новым подходом разработчики получают гранулярный контроль над включаемыми свойствами, создавая более компактные, безопасные события, соответствующие современным практикам работы с сообщениями.
Основные преимущества:
_ Выбор только свойств, релевантных для события.
_ Снижение нагрузки и предотвращение ненужного раскрытия данных.
_ Меньшие сообщения в очередях и топиках, повышение эффективности.
_ Проще развивать контракты интеграции.
Теперь возможно автоматически регистрировать все валидаторы на основе FluentValidation с использованием библиотеки Tolitech.FluentValidation.Generators.
В традиционной модели валидаторы необходимо обнаруживать и регистрировать вручную или с помощью отражения во время выполнения, что приводит к повторяющемуся коду и снижает производительность.
С использованием Source Generators этот процесс выполняется на этапе компиляции, что приводит к более оптимизированному, безопасному и легко отслеживаемому коду.
Основные преимущества:
_ Устранение ручной регистрации валидаторов.
_ Устранение использования отражения, повышение производительности и снижение расхода ресурсов.
_ Типобезопасность и проверка уже на этапе компиляции.
_ Упрощение поддержки и развития проекта.
Добавлена поддержка автоматического обнаружения и регистрации всех классов конфигурации сущностей (EntityTypeConfiguration) Entity Framework Core с использованием Source Generators.
В настоящее время этот процесс зависит от отражения или ручной регистрации в OnModelCreating, что увеличивает сложность, влияет на производительность и усложняет сопровождение.
С новой функцией маппинги решаются на этапе компиляции, что устраняет необходимость в отражении и централизует конфигурацию более эффективно.
Основные преимущества:
_ Замена использования отражения в EF Core.
_ Сокращение времени запуска приложения.
_ Обеспечение правильного применения всех конфигураций.
_ Повышение надежности и ясности при моделировании домена.
Система управления доступом на основе разрешений (PBAC) с использованием Policies в ASP.NET Core.
Разрешения автоматически создаются с помощью Source Generators и регистрируются как Policies в .NET.
Каждый сервис, использующий эти разрешения, генерирует события, которые автоматически обновляют базу разрешений системы.
Основные характеристики:
_ Автоматическая генерация разрешений через Source Generators
_ Автоматическая регистрация Policies в ASP.NET Core
_ Динамическое обновление базы разрешений через события/сообщения
_ Поддержка гибридного RBAC, сочетая простоту ролей с детализированными разрешениями
Преимущества:
_ Максимальная производительность и масштабируемость
_ Автоматизированное управление и упрощённое обслуживание
_ Гибкость для различных сценариев безопасности
Реализация нативной поддержки типа IFormFile для эндпоинтов, созданных с использованием Minimal APIs. Эта функциональность позволит автоматически генерировать маршруты с поддержкой загрузки файлов, включая:
_ Определение эндпоинтов с поддержкой загрузки через multipart/form-data;
_ Автоматическую проверку MIME-типов и допустимых максимальных размеров файлов;
_ Поддержку локального хранения и интеграцию с облачными сервисами, такими как Azure Blob Storage и AWS S3;
Идеально для приложений, которым требуется безопасная и производительная загрузка файлов, таких как изображения, документы и мультимедиа.
С этой версии Lino CLI выполняет умное автоматическое слияние сгенерированных файлов.
Раньше созданные Lino файлы напрямую заменяли существующие, что могло привести к перезаписи изменений, сделанных вручную разработчиком.
Теперь с новой стратегией 3-way merge (оригинальный сгенерированный файл, версия, отредактированная пользователем, и новый сгенерированный файл), Lino сохраняет персонализации и одновременно применяет структурные обновления шаблона.
Преимущества данного подхода:
_ Предотвращает случайную перезапись ручного кода.
_ Облегчает непрерывное развитие проектов на основе шаблонов.
_ Снижает ручные конфликты при обновлениях.
_ Улучшает интеграцию между локальными кастомизациями и развитием фреймворка.
Теперь проекты, создаваемые с помощью Lino CLI, могут автоматически регистрировать Minimal APIs с использованием библиотеки Tolitech.MinimalApis.Generators, основанной на Source Generators.
Этот подход заменяет необходимость:
_ Регистрировать каждый endpoint вручную через MapGet, MapPost и т. д.
_ Использовать Reflection для сканирования и сопоставления маршрутов — что негативно влияет на производительность.
С помощью Source Generators маршрутизация происходит во время компиляции, создавая оптимизированный, чистый и отслеживаемый код.
Основные преимущества:
_ Устраняет многословность и повторяемость при ручной регистрации маршрутов.
_ Удаляет необходимость в Reflection, снижая нагрузку на CPU и память.
_ Улучшает организацию кода и разделение ответственности.
_ Автоматически и безопасно генерирует маршруты с проверкой на этапе компиляции.
_ Облегчает поддержку и масштабирование проекта.
Теперь мы используем библиотеку Tolitech.DependencyInjection.Generators, которая заменяет подход, основанный на Reflection, из Tolitech.DependencyInjection.Extensions.
Эта новая библиотека использует механизм Source Generators в .NET для автоматической генерации регистраций зависимостей во время компиляции.
Это обеспечивает множество преимуществ:
_ Устранение Reflection во время выполнения, что повышает производительность приложения.
_ Более предсказуемая и отслеживаемая генерация кода.
_ Более безопасная компиляция с ранним обнаружением ошибок.
_ Родная интеграция с пайплайном сборки .NET.
Мы начали использовать Central Package Manager (CPM) — современный подход к управлению пакетами NuGet в решениях с несколькими проектами.
С его помощью все версии пакетов централизованно определяются в файле Directory.Packages.props, что устраняет несоответствия и упрощает безопасные и согласованные обновления.
Это снижает количество ошибок из-за различий версий между проектами, улучшает отслеживаемость и упрощает массовое обновление зависимостей.
Lino теперь генерирует решения в новом формате .slnx, что является современной эволюцией традиционного .sln.
Формат .slnx, основанный на XML, был принят благодаря его лучшей читаемости как для людей, так и для инструментов, снижая сложность интеграции с внешними системами и CI/CD пайплайнами.
Кроме того, его более чистая структура значительно улучшает контроль версий — изменения становятся более предсказуемыми и удобными для обзора.
Это изменение соответствует будущему направлению экосистемы .NET, способствуя повышенной совместимости, расширяемости и автоматизации разработки проектов.
Подписка Community теперь предлагает поддержку для создания проектов на основе .NET 9 и Aspire 9.2.1, позволяя пользователям бесплатно и технически исследовать возможности платформы.
Это обновление включает в себя:
_ Создание сервисов и сущностей с автоматическим scaffolding;
_ Выбор базы данных и полная начальная настройка;
_ Функциональная генерация до стадии EF Core Migrations.
Хотя такие продвинутые функции, как микросервисы и модульные монолиты, ограничены для платных планов, эта версия предоставляет надежную основу для оценки сгенерированной архитектуры, качества кода и интеграции с современной экосистемой .NET.
CLI теперь предоставляет команду lino database migrations add для упрощения создания миграций для любого сервиса или модуля проекта.
Эта функция автоматизирует генерацию миграционных скриптов, привязанных к версии сборки, и позволяет последовательно документировать изменения.
Основные преимущества:
_ Быстрое создание миграций по сервису или модулю с простыми и понятными командами.
_ Автоматическая генерация скриптов .sql, совместимых с версионированием проекта.
_ Облегчает контроль версий базы данных даже в распределённых архитектурах.
_ Стандартизирует и документирует структурные изменения базы безопасно и с аудиторской проверкой.
_ Естественная интеграция с процессом сборки и деплоя приложения.
Новая функция управления версиями позволяет перечислять существующие версии и выполнять bump версии для сервисов и веб-приложений, созданных с помощью инструмента, в соответствии с соглашением SemVer (семантическое версионирование). Это обеспечивает большую отслеживаемость, стандартизацию и контроль в процессе релизов.
С помощью команды version можно легко задать или обновить номер версии для каждого сервиса или приложения, облегчая аудит и внедряя лучшие практики в рабочий процесс разработки.
Команда build также была улучшена: теперь она создаёт Docker-образы с соответствующей версионной меткой, упрощая упаковку и подготовку к публикации.
Эти улучшения повышают согласованность и предсказуемость в управлении релизами, обеспечивая большую прозрачность для команд разработки и эксплуатации.
Настройка свойств, которые будут учитываться при генерации артефактов типа Command (Post, Put, Patch) и Query (Get).
Эта функция предлагает:
_ Интерактивный интерфейс в CLI для выбора свойств во время процесса scaffolding сущностей;
_ Автоматическая генерация объектов только с выбранными полями для input/output;
_ Полная поддержка кастомизации payload'ов в REST API, повышая гибкость и контроль над передаваемыми данными;
_ Интеграция с валидацией и сгенерированными контрактами данных, с соблюдением правил обязательности и согласованности.
Это улучшение направлено на предоставление большей детализации при моделировании артефактов, позволяя разработчику точно контролировать, что будет отображено, сохранено или запрошено через архитектуру, сгенерированную CLI.
В Lino CLI реализован автоматический механизм версионирования и резервного копирования файлов с целью обеспечения безопасности и отслеживаемости при создании и перезаписи файлов.
Все сгенерированные файлы сохраняются в папке /.lino/files/.../received/, что гарантирует их хронологическую организацию и легкую доступность.
Замененные файлы остаются в папке /.lino/files/.../replaced/, что позволяет восстановить предыдущие версии при необходимости. Эта структура резервного копирования обеспечивает больший контроль и безопасность, позволяя проводить полный аудит сгенерированных файлов, особенно в условиях совместной и автоматизированной разработки.
Полная реализация аутентификации и авторизации для frontend и backend проектов на основе JWT (JSON Web Tokens) и гранулярного контроля прав с помощью кастомных Authorization Policies в ASP.NET Core.
Основные моменты:
_ Безопасный вход с выдачей и проверкой JWT.
_ Авторизация на основе пользовательских политик (Claims и Roles).
_ Автоматическая интеграция между сгенерированными API и frontend (Blazor).
_ Защита маршрутов и компонентов на основе прав пользователя.
Преимущества:
_ Надёжная безопасность для современных приложений.
_ Стандартизация модели доступа по профилю и домену.
_ Безопасный и интегрированный пользовательский опыт между слоями приложения.
_ Лёгкость расширения или адаптации под нужды компании.
Теперь можно добавить один или несколько фронтендов к сгенерированным проектам с начальной поддержкой Blazor Web Apps — включая модели Server и WebAssembly.
Эти фронтенды автоматически интегрируются с API, сгенерированными инструментом, позволяя создавать полные CRUD-страницы с прямыми вызовами конечных точек backend и сохранением данных в базе.
Основные моменты:
_ Генерация UI на основе доменных сущностей.
_ Нативная связь с сгенерированными API.
_ Полноценная функциональность: фронтенд, бэкенд и база данных работают вместе.
_ Возможность нескольких фронтендов в одном проекте (например: админ, портал, публичный).
Преимущества:
_ Быстрая разработка интерфейсов.
_ Меньше переделок и ручной интеграции.
_ Унифицированный стандарт навигации, стиля и доступа к данным.
_ Повышенная продуктивность с автоматической генерацией CRUD-страниц.
Мы внедрили стандарт Transactional Outbox для обеспечения надежности отправки интеграционных событий.
Вместо того чтобы публиковать событие напрямую во время транзакции приложения, теперь оно регистрируется в специальной таблице внутри той же транзакции базы данных.
Позже background job читает эту outbox и выполняет фактическую отправку события.
Преимущества данного подхода:
_ Обеспечивает согласованность между изменениями в базе и публикацией событий.
_ Избегает потери сообщений при промежуточных сбоях.
_ Позволяет контролировать повторную отправку и аудит опубликованных событий.
_ Соответствует лучшим практикам архитектуры, ориентированной на события и микросервисы.
Была добавлена возможность включения Background Jobs в сгенерированные сервисы — будь то простые или модульные — с использованием библиотеки Hangfire.
Теперь проекты изначально поддерживают планирование и выполнение фоновых задач, включая:
_ Регулярное (cron), запланированное или немедленное выполнение.
_ Мониторинг через встроенную панель управления.
_ Надежная персистенция и повторная обработка заданий.
Этот механизм также может использоваться вместе с Transactional Outbox Pattern, обеспечивая надежную отправку интеграционных событий даже при частичных сбоях или в распределённых системах.
Основные преимущества:
_ Автоматизация повторяющихся и длительных задач без блокировки основного потока.
_ Высокая устойчивость и надёжность фоновых задач.
_ Готовая интеграция с шаблоном Outbox для надёжных событий.
_ Простая настройка и кастомизация заданий для каждого сервиса.
_ Встроенная панель для мониторинга и управления выполнением.
Добавлена возможность настройки поддержки асинхронной передачи сообщений с помощью RabbitMQ, используя абстракции и расширенные возможности MassTransit.
В результате сгенерированные сервисы могут взаимодействовать слабо связанным и устойчивым образом, используя распределённые события и команды.
Основные особенности интеграции:
_ Автоматическая настройка транспорта с RabbitMQ.
_ Публикация и прослушивание событий через MassTransit с нативным внедрением зависимостей.
_ Совместимость с паттерном Transactional Outbox для повышения надежности.
Преимущества:
_ Высокая масштабируемость с событийно-ориентированной коммуникацией.
_ Отвязка производителей и потребителей.
_ Повышенная устойчивость к сбоям и автоматическая повторная обработка.
_ Легкость поддержки и расширения асинхронных бизнес-процессов.
Реализован надёжный механизм Unit of Work с полным контролем транзакций, управлением доменными событиями, публикацией интеграционных событий (Outbox Pattern), автоматическим откатом и поддержкой шаблона Result для коммита/отката в зависимости от успеха или неудачи операции.
Основные моменты:
_ Явное создание транзакций с контролем уровня изоляции.
_ Публикация Domain Events синхронизирована с сохранением данных.
_ Публикация Integration Events в разомкнутом виде через Outbox Pattern.
_ Автоматический откат и обработка исключений с поддержкой валидации ограничений.
_ Коммит зависит от Result операции.
_ Структурированное логирование событий, транзакций и ошибок.
Преимущества:
_ Транзакционная согласованность между записями в базе и сгенерированными событиями.
_ Гибкость использования стандартного SaveChanges или полного контроля потока.
_ Упрощённое модульное тестирование и отслеживание ошибок.
_ Чёткое разделение между Доменом и Инфраструктурой с поддержкой MediatR.
Теперь можно индивидуально задать базу данных для каждого сгенерированного сервиса — с нативной поддержкой SQL Server и PostgreSQL.
Этот подход позволяет каждому сервису иметь собственную базу данных, обеспечивая полную изоляцию и упрощая реализацию архитектурных практик, ориентированных на реальные микросервисы.
В случае модульных сервисов приложение по-прежнему использует одну базу данных на сервис, разделяя каждый модуль с помощью schema, сохраняя организацию и согласованность.
Основные преимущества:
_ Изоляция данных между сервисами, повышение безопасности и ясности ответственности.
_ Возможность поэтапного внедрения микросервисов с независимыми базами данных.
_ Разделение по схемам в модульных сервисах, упрощающее сопровождение и понимание предметной области.
_ Полная гибкость в выборе наиболее подходящей СУБД для каждого сервиса.
_ Упрощённое тестирование, развертывание и горизонтальное масштабирование.
O Lino CLI теперь позволяет разработчику выбирать при генерации проекта между созданием простых сервисов (традиционных) или модульных сервисов, с полной свободой комбинировать оба варианта в зависимости от потребностей решения.
Этот подход обеспечивает поддержку различных архитектурных стилей:
Простые сервисы: идеальны для построения решений на основе микросервисов или для создания традиционных монолитных приложений в прямом и изолированном виде.
Модульные сервисы: структурируют домен приложения в Bounded Contexts, облегчая подход модульного монолита с чётким разграничением ответственности и лучшей связностью компонентов.
Вы можете добавлять сколько угодно сервисов — простых, модульных или оба типа — в зависимости от сценария приложения.
Преимущества такого подхода:
_ Большее гибкость при моделировании архитектуры.
_ Легкость постепенного перехода от монолита к микросервисам.
_ Чёткое распределение ответственности по доменам или контекстам.
_ Лучшая организация кода и соответствие современным архитектурным практикам.
_ Снижение связности и повышение удобства поддержки.
Разрабатывайте с микросервисами или используйте модульный монолит — вы выбираете идеальный путь для вашего приложения.
Добавлена нативная поддержка гибридного кэша с использованием библиотеки Microsoft.Extensions.Caching.Hybrid.
Реализация объединяет кэш в памяти (MemoryCache) с распределённым кэшем (DistributedCache), обеспечивая лучшее из обоих миров.
Такой подход обеспечивает чрезвычайно быстрые ответы на частые запросы, при этом сохраняя синхронизацию и масштабируемость в распределённых средах.
Преимущества гибридной стратегии:
_ Высокая производительность благодаря немедленному чтению из локальной памяти.
_ Сохранение и совместное использование данных между экземплярами через распределённый кэш.
_ Снижение количества обращений к базе данных и внешним API.
_ Лучшая горизонтальная масштабируемость для приложений с несколькими репликами.
_ Интеллектуальная синхронизация между двумя уровнями кэша.
Идеально для сценариев, требующих высокой производительности и согласованности без ущерба для архитектурной гибкости.
Lino CLI теперь генерирует проекты с встроенной поддержкой нескольких языков, включая автоматический перевод для следующих культур:
en, pt-BR, es, fr, it, de, ja, ko, zh-Hans и ru.
Файлы ресурсов (resx) автоматически создаются на основе основного языка, а содержимое переводится автоматически, готовое к немедленному использованию в глобальных приложениях.
Преимущества многоязычной поддержки:
_ Облегчает создание приложений для разных регионов и культур.
_ Сокращает время, необходимое для интернационализации.
_ Натуральная интеграция с системой локализации .NET.
_ Улучшает опыт конечного пользователя в многоязычных приложениях.
_ Позволяет быстро масштабировать решения для глобального рынка.
Коды, сгенерированные Lino CLI, теперь используют LoggerMessage для более эффективной и производительной записи логов.
В отличие от обычных расширяющих методов ILogger, которые создают boxing значимых типов и влияют на выделение памяти во время выполнения, шаблон LoggerMessage создает строго типизированные и статические Actions для каждого сообщения лога.
Преимущества этого подхода:
_ Значительное снижение выделения памяти.
_ Избегает boxing значимых типов, таких как int, Guid, DateTime и т.д.
_ Лучшее быстродействие в сценариях с большим объемом логов.
_ Стандартизация и централизация сообщений логов.
_ Повышенная ясность при аудите, диагностике и мониторинге.
Это улучшение особенно важно для API и бэкенд-сервисов, где производительность и трассируемость имеют ключевое значение.
Теперь Lino CLI предлагает необязательную поддержку Strongly Typed Ids, позволяя представлять идентификаторы сущностей с помощью строго типизированных специфических типов вместо универсальных, таких как Guid или int.
Эта функция помогает избежать распространённых ошибок, таких как случайное присвоение идентификатора одной сущности другой, а также делает код более выразительным и соответствующим предметной области приложения.
Преимущества использования Strongly Typed Ids:
_ Повышенная типовая безопасность во время компиляции.
_ Исключение случайных присвоений между разными сущностями.
_ Улучшенная читаемость и ясность намерений кода.
_ Упрощённый трекинг и отладка идентификаторов в домене.
_ Интеграция с EF Core, JSON-сериализацией и валидацией.
Функция является необязательной и может быть активирована при генерации проекта.
Сгенерированные проекты теперь можно настроить с поддержкой статического анализа кода, используя основные анализаторы экосистемы .NET.
Эти инструменты интегрированы напрямую в процесс сборки и помогают выявлять проблемы с форматированием, стилем, архитектурой и возможные логические ошибки еще на этапе разработки.
Преимущества:
_ Обеспечивает согласованность и стандартизацию кода с самого начала.
_ Раннее обнаружение ошибок и плохих практик.
_ Облегчает ревью кода и техническое введение в проект.
_ Улучшает качество и поддерживаемость кода.
_ Предотвращает распространённые ошибки и улучшает соблюдение лучших практик .NET.
Настройка может быть персонализирована для каждого проекта, обеспечивая большую гибкость в уровне строгости.
Создана библиотека Tolitech.Results, которая полностью и удобно реализует Result Pattern в .NET.
Эта библиотека инкапсулирует результат операций — успешных или с ошибками — в структурированные объекты, содержащие HTTP-статус, сообщения, ошибки, заголовки, детали и опциональные данные (с поддержкой Result<T>).
Преимущества использования Result Pattern:
_ Стандартизация возврата операций по всему приложению.
_ Снижение исключений как средства управления потоком.
_ Упрощение композиции и цепочек операций.
_ Лучшее взаимодействие между слоями и сервисами.
_ Плавная интеграция с HTTP API, валидациями и сообщениями об ошибках.
_ Улучшенный опыт отладки и структурированного логирования.
Кроме того, расширения, такие как Tolitech.Results.Http и Tolitech.Results.Guards, расширяют интеграцию с REST API и защитной валидацией.