Отслеживайте наш прогресс и будущие функции. Мы постоянно развиваемся, чтобы предоставить вам лучший опыт разработки.
Это обновление обеспечит полную поддержку генерации проектов на основе .NET 10 сразу после официального релиза новой версии от Microsoft.
В настоящее время Lino генерирует проекты на основе .NET 9, используя все доступные возможности платформы, включая улучшения производительности, расширенные функции C# 13 и современную интеграцию с ASP.NET Core.
Цель будущей версии — обеспечить немедленную поддержку .NET 10 с обновлёнными шаблонами, соответствующими настройками Target Framework
и scaffolding, готовым к новым возможностям языка и среды выполнения.
Автоматическая генерация тестов с поддержкой двух основных уровней:
Модульные тесты:
Создание тестов для отдельных классов и методов, с акцентом на бизнес-логику.
Интеграционные тесты:
Создание тестов для проверки взаимодействия между компонентами, моделируя взаимодействие с базами данных и внешними сервисами.
Реализация автоматической генерации файлов .http
с целью упростить тестирование и документирование REST-эндпоинтов в средах разработки.
Система управления доступом на основе разрешений (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.Presentation.API.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 и защитной валидацией.