Muonroi.BuildingBlock
1.6.21
dotnet add package Muonroi.BuildingBlock --version 1.6.21
NuGet\Install-Package Muonroi.BuildingBlock -Version 1.6.21
<PackageReference Include="Muonroi.BuildingBlock" Version="1.6.21" />
<PackageVersion Include="Muonroi.BuildingBlock" Version="1.6.21" />
<PackageReference Include="Muonroi.BuildingBlock" />
paket add Muonroi.BuildingBlock --version 1.6.21
#r "nuget: Muonroi.BuildingBlock, 1.6.21"
#:package Muonroi.BuildingBlock@1.6.21
#addin nuget:?package=Muonroi.BuildingBlock&version=1.6.21
#tool nuget:?package=Muonroi.BuildingBlock&version=1.6.21
Muonroi Building Block
Introduction
This library provides entities such as User, Role, Permission, and Language, along with built-in dependency injection, bearer token management, JSON handling utilities, string conversion, and localization for multiple languages. It also sets up linking tables like MUserRoles and MRolePermissions together with token and audit tables. See Database Structure for the full schema. It now also includes a lightweight rule engine that supports strongly typed rules and dynamic JSON workflows. See the Rule Engine Guide for details. The package is designed to accelerate the development of .NET applications following a clean architecture.
Rule Engine Features
- Compose strongly typed
IRule<T>classes with dependency ordering and feature toggles. - Run versioned JSON workflows via
RulesEngineServiceandIRuleSetStore. - Hook into rule execution with
RuleOrchestratorandIHookHandlerfor logging or audits. - Sign and verify rule artifacts while emitting OpenTelemetry metrics.
- Generate workflows from existing code with the
MR.RuleGenCLI. - Execute generated workflows at runtime through
MR.RuleRuntime.
Prerequisites
- .NET SDK 9.0 or higher must be installed. You can download it from the official website.
Installation
Install the package from NuGet:
dotnet add package Muonroi.BuildingBlock
The command above installs the latest available version. You can also browse the NuGet Gallery to select a specific version or install it via the Visual Studio package manager.
Building from source
If you'd like to contribute or customize the library locally, clone this repository and run:
dotnet build
dotnet pack
Quick Start
You can also use the muonroibase.template dotnet template:
dotnet new install muonroibase.template
dotnet new muonroibase -n YourNewProjectName -C MyCoreName
See the Samples/Program.cs file for a minimal setup example.
Additional samples are provided in the Samples folder:
MemoryCachedemonstrates basic in-memory caching.MultiLevelCacheshows how to combine memory and distributed caches.RedisCacheillustrates using Redis as a distributed cache.MultipleCachedemonstrates using bothIMemoryCacheandIMultiLevelCacheService.HelloRuleshighlights the built-in rule engine.ImportExportRulesshows versioned JSON workflows.PaymentApprovalorchestrates multiple rules for a business scenario.AuthAuthzBffshows how to combine authentication, authorization and the BFF pattern.
Project Structure
MuonroiBuildingBlock/
├── src/
│ ├── Muonroi.BuildingBlock/
│ ├── Muonroi.RuleEngine/
│ ├── Muonroi.Tenancy/
│ ├── Muonroi.Bff/
│ └── Muonroi.Base.Template/
├── Samples/
├── docs/
├── tests/
├── db/
├── deploy/
├── k8s/
└── tools/
| Folder | Description |
|---|---|
src/ |
Core source code for the library and related packages. Key projects include Muonroi.BuildingBlock, Muonroi.RuleEngine, Muonroi.Tenancy, Muonroi.Bff, and Muonroi.Base.Template. |
Samples/ |
Standalone examples demonstrating caching, rule engine workflows, BFF patterns, and more. |
docs/ |
DocFX documentation and guides covering configuration, permissions, rules, and other topics. |
tests/ |
Unit and integration tests for each module. |
db/ |
Database migration scripts and schema definitions. |
deploy/ |
Deployment scripts and release tooling. |
k8s/ |
Kubernetes manifests and configuration files. |
tools/ |
Development utilities and helper scripts. |
Usage Guide
1. Configuring Program.cs
Here's how to configure your Program.cs file to use the library's features:
using System.Reflection;
using Muonroi.BuildingBlock.External;
using Muonroi.BuildingBlock.External.Common.Constants;
using Muonroi.BuildingBlock.External.Cors;
using Muonroi.BuildingBlock.External.DI;
using Muonroi.BuildingBlock.External.Entity;
using Muonroi.BuildingBlock.External.Entity.DataSample;
using Muonroi.BuildingBlock.External.Logging;
using Muonroi.BuildingBlock.External.Messaging;
using Muonroi.BuildingBlock.External.Caching.Distributed.MultiLevel;
using Muonroi.BuildingBlock.External.Grpc;
using Muonroi.BuildingBlock.External.Consul;
using Serilog;
// Replace with your project's using statements
// using YourProject.Data;
// using YourProject.Permissions;
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
Assembly assembly = Assembly.GetExecutingAssembly();
ConfigurationManager configuration = builder.Configuration;
builder.AddAppConfiguration();
builder.AddAutofacConfiguration();
builder.Host.UseSerilog((context, services, loggerConfiguration) =>
{
MSerilogAction.Configure(context, services, loggerConfiguration, false);
});
Log.Information("Starting {ApplicationName} API up", builder.Environment.ApplicationName);
try
{
IServiceCollection services = builder.Services;
// Register services
services.AddApplication(assembly);
services.AddInfrastructure(configuration);
services.SwaggerConfig(builder.Environment.ApplicationName);
services.AddScopeServices(typeof(<YourDbContext>).Assembly);
services.AddValidateBearerToken<<YourDbContext>, MTokenInfo, <YourPermissionEnum>>(configuration);
services.AddDbContextConfigure<<YourDbContext>, <YourPermissionEnum>>(configuration);
services.AddCors(configuration);
services.AddPermissionFilter<<YourPermissionEnum>>();
services.ConfigureMapper();
// Optional Integrations
services.AddMultiLevelCaching(configuration);
services.AddMessageBus(configuration, assembly);
services.AddGrpcServer();
services.AddServiceDiscovery(configuration, builder.Environment);
services.AddObservability(configuration);
WebApplication app = builder.Build();
await app.UseServiceDiscoveryAsync(builder.Environment);
app.UseCors("MAllowDomains");
app.UseDefaultMiddleware<<YourDbContext>, <YourPermissionEnum>>();
app.AddLocalization(assembly);
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.ConfigureEndpoints();
app.MigrateDatabase<<YourDbContext>>();
await app.RunAsync();
}
catch (Exception ex)
{
Log.Fatal(ex, "Unhandled exception: {Message}", ex.Message);
}
finally
{
Log.Information("Shut down {ApplicationName} complete", builder.Environment.ApplicationName);
await Log.CloseAndFlushAsync();
}
2. Example appsettings.json Configuration
Here's a comprehensive example of the appsettings.json configuration:
{
"DatabaseConfigs": {
"DbType": "Sqlite",
"ConnectionStrings": {
"SqliteConnectionString": "Your encrypted connection string by secret key",
"MongoDbConnectionString": "Your encrypted connection string by secret key",
"SqlServerConnectionString": "Your encrypted connection string by secret key",
"MySqlConnectionString": "Your encrypted connection string by secret key",
"PostgreSqlConnectionString": "Your encrypted connection string by secret key"
}
},
"ApiKey": "",
"CacheConfigs": {
"CacheType": "MultiLevel"
},
"RedisConfigs": {
"Enable": true,
"Host": "Your host encrypted by secret key",
"Port": "Your port encrypted by secret key",
"Password": "Your password encrypted by secret key",
"Expire": 30,
"KeyPrefix": "Your prefix encrypted by secret key",
"AllMethodsEnableCache": false
},
"TokenConfigs": {
"Issuer": "https://exampledomain.com",
"Audience": "https://searchpartners.exampledomain.com",
"SigningKeys": "",
"UseRsa": true,
"ExpiryMinutes": 30,
"EnableCookieAuth": true,
"CookieName": "AuthToken",
"CookieSameSite": "Lax",
"PublicKey": "-----BEGIN PUBLIC KEY-----\n...-----END PUBLIC KEY-----",
"PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\n...-----END RSA PRIVATE KEY-----"
},
"PaginationConfigs": {
"DefaultPageIndex": 1,
"DefaultPageSize": 10,
"MaxPageSize": 100
},
"ResourceSetting": {
"ResourceName": "Resources.ErrorMessages",
"lang": "vi-VN"
},
"Serilog": {
"Using": [ "Serilog.Sinks.Console", "Elastic.Serilog.Sinks" ],
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft.AspNetCore": "Warning",
"System": "Warning"
}
},
"WriteTo": [
{ "Name": "Console" },
{
"Name": "File",
"Args": { "path": "logs/log-.json", "formatter": "Serilog.Formatting.Elasticsearch.ElasticsearchJsonFormatter, Serilog.Formatting.Elasticsearch" }
},
{
"Name": "Elasticsearch",
"Args": {
"bootstrapMethod": "Silent",
"nodes": [ "http://localhost:9200" ],
"dataStream": "logs-muonroi-default",
"ilmPolicy": "muonroi-policy"
}
}
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
"Properties": {
"Application": "MyApplication"
}
},
"MAllowDomains": "https://localhost:52182,http://localhost:4200",
"GrpcServices": {
"Services": {
"YourService1": { "Uri": "http://localhost:5001" },
"YourService2": { "Uri": "http://localhost:5002" }
}
},
"ConsulConfigs": {
"ServiceName": "MyService",
"ConsulAddress": "http://localhost:8500",
"ServiceAddress": "http://localhost",
"ServicePort": 5000
},
"MessageBusConfigs": {
"BusType": "RabbitMq",
"RabbitMq": {
"Host": "localhost",
"VirtualHost": "/",
"Username": "guest",
"Password": "guest"
},
"Kafka": {
"Host": "localhost:9092",
"Topic": "sample-topic",
"GroupId": "sample-group"
}
},
"BackgroundJobConfigs": {
"JobType": "Hangfire",
"ConnectionString": "Your job storage connection string"
},
"KubernetesConfigs": {
"ClusterType": "K8s",
"ClusterEndpoint": "https://your-cluster-api"
},
"OpenTelemetry": {
"ServiceName": "MyService",
"OtlpEndpoint": "http://localhost:4317"
},
"SecretKey": "Your secret key used to encrypt important values",
"EnableEncryption": true
}
3. Providing Resource Files
Create a Resources directory in your project and place localization JSON files inside it. Each file should follow the pattern ErrorMessages-<culture>.json (e.g., ErrorMessages-en-US.json) and contain key-value pairs of error codes and messages. Ensure the ResourceSetting.ResourceName value in appsettings.json matches the base file name.
Main Components
- Entities: Core data models like
MUser,MRole,MPermission, andMLanguage. - Dependency Injection: Pre-configured DI using Autofac for managing application services and lifecycles.
- Authentication & Authorization: Robust token-based security with JWT, refresh tokens, and a flexible permission system.
- Data Access: Generic repositories (
MRepository<T>) and query classes (MQuery<T>) for Entity Framework Core, along with Dapper integration for performance-critical queries. - Caching: Multi-level caching support (in-memory and Redis) to improve performance.
- Rule Engine: Compose strongly typed
IRule<T>classes and dynamic JSON workflows with dependency ordering and feature toggles. - Service Discovery: Consul integration for registering and discovering services in a microservices environment.
- Message Bus: MassTransit integration for both RabbitMQ and Kafka to enable asynchronous communication and Saga patterns.
- Background Jobs: Configuration helpers for background job schedulers like Hangfire or Quartz.
- gRPC: Helpers to easily configure gRPC servers and clients.
- Logging: Centralized logging with Serilog, including out-of-the-box support for Elasticsearch.
- Cryptography:
MCryptographyExtensionuses SHA-256 for secure hashing and AES for configuration encryption. - Localization: Built-in support for multiple languages using JSON resource files.
Rule Engine
The Muonroi.RuleEngine packages provide a flexible way to evaluate business rules. Rules implement IRule<T> and can declare dependencies, hook points, and optional feature flags. JSON workflows can be loaded at runtime through RulesEngineService, and results are collected in a FactBag for later rules.
For projects with existing conditional logic, the MR.RuleGen CLI can generate workflow definitions automatically. At runtime, MR.RuleRuntime loads these workflows, registers custom types and actions, and executes them against supplied parameters.
services.AddRuleEngine().AddRulesFromAssemblies(typeof(Program).Assembly);
For practical examples see the HelloRules, ImportExportRules, and PaymentApproval samples or read the Rule Engine Guide.
Integrations
Redis Caching
Configure caching via CacheConfigs and RedisConfigs in your settings.
// In Program.cs
services.AddMultiLevelCaching(configuration);
gRPC Integration
Use helpers in External/Grpc to configure gRPC. The GrpcHandler class provides extension methods for registering servers and clients from appsettings.json.
Consul Integration
Service discovery support is provided in External/Consul. The ConsulHandler registers and deregisters your service with Consul automatically. Call AddServiceDiscovery and UseServiceDiscoveryAsync in Program.cs.
Message Bus (Kafka/RabbitMQ)
Configure your message broker via MessageBusConfigs. The helper in External/Messaging uses MassTransit to select the broker. Register consumers and sagas easily:
// In Program.cs
services.AddMessageBus(configuration, Assembly.GetExecutingAssembly(), cfg => {
/* Optional Saga/Consumer configuration */
});
Use PublishWithAuthContext on IPublishEndpoint to automatically include authentication headers when publishing messages.
Background Job Configuration
Configure background jobs using the BackgroundJobConfigs section. Choose Hangfire or Quartz and specify a connection string for job storage.
// Example for Hangfire with SQL Server
services.AddHangfire(x => x.UseSqlServerStorage(configuration["BackgroundJobConfigs:ConnectionString"]));
app.UseHangfireDashboard();
BackgroundJob.Enqueue(() => Console.WriteLine("Hello from Hangfire"));
Kubernetes Integration
Specify deployment details for k8s or k3s clusters under KubernetesConfigs, including the cluster type and API endpoint.
Documentation
This project uses DocFX to generate documentation.
- To build the documentation, run:
docfx build - To preview the documentation locally, run:
docfx serve _site
For more details, see the guides in the docs directory:
- Permission System Guide
- Permission Tree Guide
- Rule Engine Guide
- Rule Rollout Guide
- Rule Governance Guide
- Data Layer Guide
- Database Structure
- Gateway Configuration
- Multi-Tenant Guide
- Cache Guide
- Token Guide
- Appsettings Guide
- Background Jobs Guide
- Quickstart: Multi-Tenant API with JWT & RBAC
- CI/CD with Docker and Kubernetes
- NRules Integration
- ASVS Checklist
ASVS Pre-Merge Checklist
- Security Configuration (V14) – verify secure configuration and secret management.
- Input Validation (V5) – validate and sanitize all inputs.
- Authorization (V4) – enforce RBAC and deny by default.
For a detailed checklist see docs/asvs-checklist.md.
Formatting
Run dotnet format Muonroi.BuildingBlock.sln to apply the coding style defined in .editorconfig.
Contribution
Please read CONTRIBUTING.md for detailed guidelines on how to fork the project, run tests, and format your code. Feel free to submit pull requests or open issues on GitHub to contribute or report bugs for this project.
License
This library is licensed under the MIT License. Please see the LICENSE file for more details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net9.0
- Asp.Versioning.Mvc (>= 8.1.0)
- Autofac (>= 8.3.0)
- Autofac.Extensions.DependencyInjection (>= 10.0.0)
- Azure.Core (>= 1.46.2)
- Azure.Identity (>= 1.14.0)
- BCrypt.Net-Core (>= 1.6.0)
- BouncyCastle.NetCore (>= 2.2.1)
- Castle.Core (>= 5.2.1)
- Consul (>= 1.7.14.7)
- Dapper (>= 2.1.66)
- Dapper.Extensions.Caching.Redis (>= 5.3.1)
- Dapper.Extensions.MSSQL (>= 5.3.1)
- Dapper.Extensions.MySQL (>= 5.3.1)
- Dapper.Extensions.NetCore (>= 5.3.1)
- Dapper.Extensions.PostgreSQL (>= 5.3.1)
- DnsClient (>= 1.8.0)
- Elastic.Serilog.Sinks (>= 8.18.1)
- FluentValidation (>= 12.0.0)
- FluentValidation.AspNetCore (>= 11.3.1)
- FluentValidation.DependencyInjectionExtensions (>= 12.0.0)
- FreeRedis (>= 1.4.0)
- Google.Protobuf (>= 3.31.1)
- Grpc.AspNetCore.Server (>= 2.71.0)
- Grpc.Core.Api (>= 2.71.0)
- Grpc.Net.Client (>= 2.71.0)
- Grpc.Net.ClientFactory (>= 2.71.0)
- Grpc.Net.Common (>= 2.71.0)
- Hangfire.AspNetCore (>= 1.8.21)
- Hangfire.Core (>= 1.8.21)
- JetBrains.Annotations (>= 2024.3.0)
- MassTransit (>= 8.4.1)
- MassTransit.Kafka (>= 8.4.1)
- MassTransit.RabbitMQ (>= 8.4.1)
- Microsoft.AspNetCore.Authentication.JwtBearer (>= 9.0.5)
- Microsoft.AspNetCore.Authentication.OpenIdConnect (>= 9.0.5)
- Microsoft.AspNetCore.Identity.EntityFrameworkCore (>= 9.0.5)
- Microsoft.AspNetCore.OpenApi (>= 9.0.5)
- Microsoft.Bcl.AsyncInterfaces (>= 9.0.5)
- Microsoft.Bcl.Cryptography (>= 9.0.5)
- Microsoft.Data.SqlClient (>= 6.0.2)
- Microsoft.Data.SqlClient.SNI.runtime (>= 6.0.2)
- Microsoft.Data.Sqlite.Core (>= 9.0.5)
- Microsoft.EntityFrameworkCore (>= 9.0.5)
- Microsoft.EntityFrameworkCore.Abstractions (>= 9.0.5)
- Microsoft.EntityFrameworkCore.Analyzers (>= 9.0.5)
- Microsoft.EntityFrameworkCore.InMemory (>= 9.0.5)
- Microsoft.EntityFrameworkCore.Relational (>= 9.0.5)
- Microsoft.EntityFrameworkCore.Sqlite (>= 9.0.5)
- Microsoft.EntityFrameworkCore.Sqlite.Core (>= 9.0.5)
- Microsoft.EntityFrameworkCore.SqlServer (>= 9.0.5)
- Microsoft.Extensions.Caching.Abstractions (>= 9.0.5)
- Microsoft.Extensions.Caching.Memory (>= 9.0.5)
- Microsoft.Extensions.Caching.StackExchangeRedis (>= 9.0.5)
- Microsoft.Extensions.Configuration (>= 9.0.5)
- Microsoft.Extensions.Configuration.Abstractions (>= 9.0.5)
- Microsoft.Extensions.Configuration.Binder (>= 9.0.5)
- Microsoft.Extensions.Configuration.EnvironmentVariables (>= 9.0.5)
- Microsoft.Extensions.Configuration.FileExtensions (>= 9.0.5)
- Microsoft.Extensions.Configuration.Json (>= 9.0.5)
- Microsoft.Extensions.DependencyInjection (>= 9.0.5)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.5)
- Microsoft.Extensions.DependencyModel (>= 9.0.5)
- Microsoft.Extensions.FileProviders.Abstractions (>= 9.0.5)
- Microsoft.Extensions.FileProviders.Physical (>= 9.0.5)
- Microsoft.Extensions.Hosting.Abstractions (>= 9.0.5)
- Microsoft.Extensions.Http (>= 9.0.5)
- Microsoft.Extensions.Http.Diagnostics (>= 9.5.0)
- Microsoft.Extensions.Http.Resilience (>= 9.5.0)
- Microsoft.Extensions.Identity.Stores (>= 9.0.5)
- Microsoft.Extensions.Logging (>= 9.0.5)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.5)
- Microsoft.Extensions.ObjectPool (>= 9.0.5)
- Microsoft.Extensions.Options (>= 9.0.5)
- Microsoft.Extensions.Primitives (>= 9.0.5)
- Microsoft.Extensions.Resilience (>= 9.5.0)
- Microsoft.Identity.Client (>= 4.72.1)
- Microsoft.Identity.Client.Extensions.Msal (>= 4.72.1)
- Microsoft.IdentityModel.Abstractions (>= 8.12.0)
- Microsoft.IdentityModel.JsonWebTokens (>= 8.12.0)
- Microsoft.IdentityModel.Logging (>= 8.12.0)
- Microsoft.IdentityModel.Protocols.OpenIdConnect (>= 8.12.0)
- Microsoft.IdentityModel.Tokens (>= 8.12.0)
- Microsoft.OpenApi (>= 1.6.24)
- MongoDB.Bson (>= 3.4.0)
- MongoDB.Driver (>= 3.4.0)
- Muonroi.RuleEngine.Abstractions (>= 1.6.20)
- Muonroi.RuleEngine.Core (>= 1.6.20)
- Muonroi.RuleEngine.NRules (>= 1.6.20)
- MySql.Data (>= 9.3.0)
- MySql.EntityFrameworkCore (>= 9.0.3)
- MySqlConnector (>= 2.4.0)
- NetJSON (>= 1.4.4)
- Npgsql (>= 9.0.3)
- Npgsql.EntityFrameworkCore.PostgreSQL (>= 9.0.4)
- OpenTelemetry.Exporter.OpenTelemetryProtocol (>= 1.12.0)
- OpenTelemetry.Extensions.Hosting (>= 1.12.0)
- OpenTelemetry.Instrumentation.AspNetCore (>= 1.12.0)
- OpenTelemetry.Instrumentation.GrpcNetClient (>= 1.12.0-beta.1)
- OpenTelemetry.Instrumentation.Http (>= 1.12.0)
- OpenTelemetry.Instrumentation.Runtime (>= 1.12.0)
- Polly (>= 8.5.2)
- Polly.Core (>= 8.5.2)
- Polly.Extensions.Http (>= 3.0.0)
- Pomelo.EntityFrameworkCore.MySql (>= 9.0.0-preview.3.efcore.9.0.0)
- Quartz (>= 3.15.0)
- Quartz.Extensions.Hosting (>= 3.15.0)
- RestEase (>= 1.6.4)
- RulesEngine (>= 6.0.0)
- Serilog (>= 4.3.0)
- Serilog.AspNetCore (>= 9.0.0)
- Serilog.Enrichers.Environment (>= 3.0.1)
- Serilog.Enrichers.Process (>= 3.0.0)
- Serilog.Enrichers.Thread (>= 4.0.0)
- Serilog.Exceptions (>= 8.4.0)
- Serilog.Expressions (>= 5.0.0)
- Serilog.Extensions.Hosting (>= 9.0.0)
- Serilog.Formatting.Compact (>= 3.0.0)
- Serilog.Formatting.Elasticsearch (>= 10.0.0)
- Serilog.Settings.Configuration (>= 9.0.0)
- Serilog.Sinks.Console (>= 6.0.0)
- Serilog.Sinks.Debug (>= 3.0.0)
- Serilog.Sinks.File (>= 7.0.0)
- SharpCompress (>= 0.40.0)
- Snappier (>= 1.2.0)
- SQLitePCLRaw.bundle_e_sqlite3 (>= 2.1.11)
- SQLitePCLRaw.core (>= 2.1.11)
- StackExchange.Redis (>= 2.8.37)
- Swashbuckle.AspNetCore (>= 8.1.4)
- Swashbuckle.AspNetCore.Swagger (>= 8.1.4)
- Swashbuckle.AspNetCore.SwaggerGen (>= 8.1.4)
- Swashbuckle.AspNetCore.SwaggerUI (>= 8.1.4)
- System.Buffers (>= 4.6.1)
- System.Configuration.ConfigurationManager (>= 9.0.5)
- System.Data.SqlClient (>= 4.9.0)
- System.Diagnostics.DiagnosticSource (>= 9.0.5)
- System.Diagnostics.EventLog (>= 9.0.5)
- System.IdentityModel.Tokens.Jwt (>= 8.12.0)
- System.Linq.Async (>= 6.0.1)
- System.Memory (>= 4.6.3)
- System.Reflection.Emit (>= 4.7.0)
- System.Reflection.Emit.ILGeneration (>= 4.7.0)
- System.Reflection.Emit.Lightweight (>= 4.7.0)
- System.Security.Cryptography.Pkcs (>= 9.0.5)
- System.Text.Json (>= 9.0.5)
- System.Threading.Tasks.Extensions (>= 4.6.3)
- ZstdSharp.Port (>= 0.8.5)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated | |
|---|---|---|---|
| 1.6.21 | 45 | 1/4/2026 | |
| 1.6.20 | 50 | 1/2/2026 | |
| 1.6.19 | 50 | 1/2/2026 | |
| 1.6.16 | 48 | 1/1/2026 | |
| 1.6.15 | 46 | 12/29/2025 | |
| 1.6.14 | 48 | 12/29/2025 | |
| 1.6.13 | 43 | 12/29/2025 | |
| 1.6.12 | 42 | 12/29/2025 | |
| 1.6.11 | 42 | 12/29/2025 | |
| 1.6.10 | 45 | 12/29/2025 | |
| 1.6.9 | 41 | 12/28/2025 | |
| 1.6.8 | 43 | 12/27/2025 | |
| 1.6.7.1 | 125 | 8/17/2025 | |
| 1.6.7 | 121 | 8/17/2025 | |
| 1.6.6 | 113 | 8/17/2025 | |
| 1.6.5 | 151 | 7/27/2025 | |
| 1.6.4 | 550 | 7/23/2025 | |
| 1.6.3 | 229 | 7/20/2025 | |
| 1.6.2 | 140 | 6/22/2025 | |
| 1.6.1 | 318 | 6/10/2025 | |
| 1.6.0 | 150 | 6/7/2025 | |
| 1.5.11 | 258 | 4/29/2025 | |
| 1.5.10 | 245 | 4/17/2025 | |
| 1.5.9.9 | 286 | 3/31/2025 | |
| 1.5.9.8 | 526 | 3/25/2025 | |
| 1.5.9.7 | 238 | 3/17/2025 | |
| 1.5.9.6 | 222 | 3/13/2025 | |
| 1.5.9.5 | 205 | 3/9/2025 | |
| 1.5.9.4 | 276 | 3/6/2025 | |
| 1.5.9.3 | 275 | 3/5/2025 | |
| 1.5.9.2 | 187 | 2/23/2025 | |
| 1.5.9.1 | 257 | 2/18/2025 | |
| 1.5.9 | 169 | 2/17/2025 | |
| 1.5.8 | 173 | 2/11/2025 | |
| 1.5.7 | 196 | 2/11/2025 | |
| 1.5.6 | 198 | 2/9/2025 | |
| 1.5.5 | 211 | 2/9/2025 | |
| 1.5.4 | 247 | 2/5/2025 | |
| 1.5.3 | 228 | 2/3/2025 | |
| 1.5.2 | 237 | 2/3/2025 | |
| 1.5.1.1 | 254 | 2/2/2025 | |
| 1.5.1 | 210 | 2/2/2025 | |
| 1.5.0 | 229 | 1/24/2025 | |
| 1.4.9 | 205 | 1/24/2025 | |
| 1.4.8 | 188 | 1/23/2025 | |
| 1.4.7 | 231 | 11/30/2024 | |
| 1.4.6 | 188 | 11/30/2024 | |
| 1.4.5 | 219 | 11/30/2024 | |
| 1.4.4 | 197 | 11/26/2024 | |
| 1.4.3 | 221 | 11/23/2024 | |
| 1.4.2 | 194 | 11/19/2024 | |
| 1.4.1 | 207 | 11/16/2024 | |
| 1.4.0 | 197 | 11/16/2024 | |
| 1.3.9 | 222 | 11/15/2024 | |
| 1.3.8 | 219 | 11/15/2024 | |
| 1.3.7 | 224 | 11/15/2024 | |
| 1.3.6 | 215 | 11/11/2024 | |
| 1.3.5 | 205 | 11/11/2024 | |
| 1.3.4 | 205 | 11/11/2024 | |
| 1.3.3 | 227 | 11/10/2024 | |
| 1.3.2 | 188 | 11/10/2024 | |
| 1.3.1 | 214 | 11/10/2024 | |
| 1.3.0 | 229 | 11/10/2024 | |
| 1.2.9 | 221 | 11/8/2024 | |
| 1.2.8 | 250 | 10/27/2024 | |
| 1.2.7 | 244 | 10/27/2024 | |
| 1.2.6 | 281 | 10/27/2024 | |
| 1.2.5 | 258 | 10/27/2024 | |
| 1.2.4 | 281 | 10/26/2024 | |
| 1.2.3 | 267 | 10/25/2024 | |
| 1.2.2 | 263 | 10/18/2024 | |
| 1.2.1 | 302 | 10/1/2024 | |
| 1.2.0 | 292 | 9/8/2024 | |
| 1.1.9 | 294 | 9/2/2024 | |
| 1.1.8 | 269 | 9/2/2024 | |
| 1.1.7 | 261 | 9/1/2024 | |
| 1.1.6 | 254 | 9/1/2024 | |
| 1.1.5 | 292 | 9/1/2024 | |
| 1.1.4 | 279 | 9/1/2024 | |
| 1.1.3 | 286 | 9/1/2024 | |
| 1.1.2 | 287 | 9/1/2024 | |
| 1.1.1 | 277 | 8/31/2024 | |
| 1.1.0 | 249 | 8/29/2024 | |
| 1.0.9 | 266 | 8/29/2024 | |
| 1.0.8 | 357 | 8/27/2024 | |
| 1.0.7 | 320 | 8/26/2024 | |
| 1.0.6 | 281 | 8/26/2024 | |
| 1.0.5 | 284 | 8/25/2024 | |
| 1.0.4 | 288 | 8/25/2024 | |
| 1.0.3 | 300 | 8/25/2024 | |
| 1.0.2 | 279 | 8/25/2024 | |
| 1.0.1 | 272 | 8/25/2024 | |
| 1.0.0 | 445 | 8/25/2024 |
v1.6.9: SECURITY FIX - removed sensitive data from template. Fixed Redis Enable flag, added RSA PEM file support for JWT, health check endpoints.
