![]() |
VOOZH | about |
dotnet add package EasyExtensions.Fonts --version 3.0.69
NuGet\Install-Package EasyExtensions.Fonts -Version 3.0.69
<PackageReference Include="EasyExtensions.Fonts" Version="3.0.69" />
<PackageVersion Include="EasyExtensions.Fonts" Version="3.0.69" />Directory.Packages.props
<PackageReference Include="EasyExtensions.Fonts" />Project file
paket add EasyExtensions.Fonts --version 3.0.69
#r "nuget: EasyExtensions.Fonts, 3.0.69"
#:package EasyExtensions.Fonts@3.0.69
#addin nuget:?package=EasyExtensions.Fonts&version=3.0.69Install as a Cake Addin
#tool nuget:?package=EasyExtensions.Fonts&version=3.0.69Install as a Cake Tool
👁 License
👁 NuGet
👁 NuGet downloads
👁 FuGet
👁 Build
👁 CodeFactor
👁 GitHub repo size
EasyExtensions is a modular set of .NET packages for application code that tends to repeat across projects: core BCL extensions, ASP.NET Core helpers, PostgreSQL/EF Core setup, Quartz job registration, WebDAV clients, ImageSharp utilities, embedded fonts, streaming AES-GCM encryption, and a lightweight mediator.
The repository is intentionally split into small NuGet packages. Install only the package you need, keep your application dependencies narrow, and use the XML documentation in your IDE or FuGet when you need a full API reference.
| Package | Target | Use when you need |
|---|---|---|
| EasyExtensions | netstandard2.1 |
Core extensions and helpers for strings, hashes, streams, enums, dates, IP/networking, claims, random strings, queues, password hashing abstractions, Brotli HTTP helpers, and stream cipher abstractions. |
| EasyExtensions.AspNetCore | net10.0 |
ASP.NET Core helpers for exception responses, health checks, CORS, request metadata, rate limiting helpers, console logging, controllers, form files, CPU usage, and PBKDF2 password hashing registration. |
| EasyExtensions.AspNetCore.Authorization | net10.0 |
JWT authentication setup, token creation, claim building, development authorization bypass, and a base auth controller with login, refresh, logout, password, and Google login hooks. |
| EasyExtensions.AspNetCore.Sentry | net10.0 |
Sentry ASP.NET Core integration with user capture. |
| EasyExtensions.AspNetCore.Stack | net10.0 |
One-call application setup for controllers, logging, compression, Quartz, SignalR, CORS, health checks, optional PostgreSQL, optional authorization, and optional EasyVault secrets. |
| EasyExtensions.Clients | net10.0 |
Cached IP lookup helpers backed by ipapi.co and configurable GeoIP endpoints. |
| EasyExtensions.Crypto | net10.0 |
Streaming AES-GCM encryption/decryption, per-chunk authentication, HKDF subkeys, secure random bytes, and hash helpers. |
| EasyExtensions.Drawing | net10.0 |
ImageSharp helpers for JPEG conversion, drawing text, blurred backgrounds, automatic brightness adjustment, and font integration. |
| EasyExtensions.EntityFrameworkCore | net10.0 |
Audited entities and DbContext base types, Gridify mapper registration, database health checks, and migration helpers. |
| EasyExtensions.EntityFrameworkCore.Npgsql | net10.0 |
PostgreSQL DbContext registration, connection string construction from configuration, lazy loading options, and design-time factory registration. |
| EasyExtensions.Fonts | netstandard2.1 |
Embedded fonts: Arial, Consola, FreeMonospaced, RetroGaming, and UbuntuMono. |
| EasyExtensions.Mediator | netstandard2.1 |
A MediatR v12.5.0 based mediator package with request, notification, stream request, pipeline behavior, pre/post processor, and exception processor support. |
| EasyExtensions.Quartz | netstandard2.1 |
Reflection-based Quartz job registration with JobTriggerAttribute, hosted service setup, and optional PostgreSQL persistent store. |
| EasyExtensions.WebDav | netstandard2.1 |
WebDAV and Nextcloud file operations: folders, existence checks, uploads, listings, downloads, and deletes. |
| EasyExtensions.Windows | netstandard2.1 |
Windows-specific helpers for shortcuts and moving files or directories to the recycle bin. |
Install packages individually:
dotnet add package EasyExtensions
dotnet add package EasyExtensions.AspNetCore
dotnet add package EasyExtensions.Crypto
dotnet add package EasyExtensions.EntityFrameworkCore.Npgsql
For an opinionated ASP.NET Core setup, start with:
dotnet add package EasyExtensions.AspNetCore.Stack
using EasyExtensions.Extensions;
using EasyExtensions.Helpers;
using System.Net;
string digest = "hello".Sha512();
IPAddress network = IPAddress.Parse("192.168.10.25").GetNetwork(24);
string maskedEmail = StringHelpers.HideEmail("vadim@example.com");
using EasyExtensions.Clients;
var defaultGeoIp = await GeoIpClient.Shared.LookupAsync("8.8.8.8");
var bridgeGeoIpClient = new GeoIpClient("https://bridge.cottoncloud.dev/api/v1/lookup");
var bridgeGeoIp = await bridgeGeoIpClient.LookupAsync("8.8.8.8");
using EasyExtensions.AspNetCore.Extensions;
builder.Logging.AddSimpleConsoleLogging();
builder.Services
.AddDefaultHealthChecks()
.AddDefaultCorsWithOrigins("https://app.example.com")
.AddExceptionHandler()
.AddPbkdf2PasswordHashService();
using EasyExtensions.AspNetCore.Authorization.Extensions;
builder.Services.AddJwt(useCookies: true);
{
"JwtSettings": {
"Key": "0123456789abcdef0123456789abcdef",
"Issuer": "my-api",
"Audience": "my-clients",
"LifetimeMinutes": 60
}
}
using EasyExtensions.AspNetCore.Stack.Extensions;
builder.AddEasyStack(stack => stack
.WithPostgres<AppDbContext>(useLazyLoadingProxies: false)
.AddAuthorization()
.UseSecrets(useSecrets: true));
using EasyExtensions.EntityFrameworkCore.Npgsql.Extensions;
builder.Services.AddPostgresDbContext<AppDbContext>(postgres =>
{
postgres.ConfigurationSection = "DatabaseSettings";
postgres.UseLazyLoadingProxies = false;
});
{
"DatabaseSettings": {
"Host": "localhost",
"Port": "5432",
"Username": "postgres",
"Password": "postgres",
"Database": "app"
}
}
using EasyExtensions.Quartz.Attributes;
using EasyExtensions.Quartz.Extensions;
using Quartz;
[JobTrigger(minutes: 5, startNow: true)]
public sealed class CleanupJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
return Task.CompletedTask;
}
}
builder.Services.AddQuartzJobs();
using EasyExtensions.Crypto;
using System.Security.Cryptography;
byte[] masterKey = RandomNumberGenerator.GetBytes(AesGcmStreamCipher.KeySize);
using var cipher = new AesGcmStreamCipher(masterKey, memoryLimitBytes: 256L * 1024 * 1024);
await using var input = File.OpenRead("plain.bin");
await using var encrypted = File.Create("plain.bin.eegcm");
await cipher.EncryptAsync(input, encrypted);
await using var cipherText = File.OpenRead("plain.bin.eegcm");
await using var plainText = File.Create("plain-restored.bin");
await cipher.DecryptAsync(cipherText, plainText);
using EasyExtensions.WebDav;
using var client = WebDavCloudClient.CreateNextcloudClient(
"https://cloud.example.com",
username: "user",
password: "app-password");
await client.CreateFolderAsync("backups");
using var backup = File.OpenRead("backup.zip");
await client.UploadFileAsync(backup, "backups/backup.zip");
netstandard2.1; see the package table before choosing a package for older applications.EasyExtensions.AspNetCore.Authorization accepts either a JwtSettings section or flat JwtKey, JwtIssuer, JwtAudience, and JwtLifetimeMinutes keys. Configure a persistent signing key in production.EasyExtensions.AspNetCore.Stack allows all CORS origins when CorsOrigins is missing. Set CorsOrigins explicitly for production services.EasyExtensions.AspNetCore.Sentry enables SendDefaultPii when Sentry is active. Review this against your data handling policy.EasyExtensions.Crypto expects you to own key storage and rotation. Do not hard-code master keys in source control.EasyExtensions.WebDav currently changes ServicePointManager.ServerCertificateValidationCallback; review this before production use.git clone https://github.com/bvdcode/EasyExtensions.git
cd EasyExtensions/Sources
dotnet restore
dotnet build --configuration Release
dotnet test --configuration Release
The test projects use NUnit and target net10.0.
Releases are produced by GitHub Actions from main when files under Sources/ change. The workflow builds the solution, packs NuGet packages, publishes artifacts, pushes packages to GitHub Packages and NuGet.org, and creates a GitHub release. Versioning is driven by GitVersion; the current next-version is configured in .
Contributions are welcome. For a clean pull request:
dotnet test from Sources/.Issues and feature requests are also welcome. Small, well-scoped proposals are easiest to review.
Most packages are distributed under the MIT License. See .
EasyExtensions.Mediator is based on MediatR v12.5.0 and uses Apache-2.0 package licensing. See .
Created and maintained by .
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 net5.0 was computed. net5.0-windows net5.0-windows was computed. net6.0 net6.0 was computed. net6.0-android net6.0-android was computed. net6.0-ios net6.0-ios was computed. net6.0-maccatalyst net6.0-maccatalyst was computed. net6.0-macos net6.0-macos was computed. net6.0-tvos net6.0-tvos was computed. net6.0-windows net6.0-windows was computed. net7.0 net7.0 was computed. net7.0-android net7.0-android was computed. net7.0-ios net7.0-ios was computed. net7.0-maccatalyst net7.0-maccatalyst was computed. net7.0-macos net7.0-macos was computed. net7.0-tvos net7.0-tvos was computed. net7.0-windows net7.0-windows was computed. net8.0 net8.0 was computed. net8.0-android net8.0-android was computed. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 was computed. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 was computed. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
| .NET Core | netcoreapp3.0 netcoreapp3.0 was computed. netcoreapp3.1 netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.1 netstandard2.1 is compatible. |
| MonoAndroid | monoandroid monoandroid was computed. |
| MonoMac | monomac monomac was computed. |
| MonoTouch | monotouch monotouch was computed. |
| Tizen | tizen60 tizen60 was computed. |
| Xamarin.iOS | xamarinios xamarinios was computed. |
| Xamarin.Mac | xamarinmac xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos xamarinwatchos was computed. |
Showing the top 1 NuGet packages that depend on EasyExtensions.Fonts:
| Package | Downloads |
|---|---|
|
EasyExtensions.Drawing
Ready-to-use library for simplifying the development of .NET applications. |
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 3.0.69 | 111 | 6/5/2026 |
| 3.0.68 | 113 | 6/5/2026 |
| 3.0.67 | 121 | 5/24/2026 |
| 3.0.66 | 100 | 5/24/2026 |
| 3.0.65 | 780 | 5/18/2026 |
| 3.0.64 | 110 | 5/18/2026 |
| 3.0.63 | 446 | 4/27/2026 |
| 3.0.62 | 145 | 4/24/2026 |
| 3.0.61 | 116 | 4/23/2026 |
| 3.0.60 | 115 | 4/22/2026 |
| 3.0.59 | 120 | 4/22/2026 |
| 3.0.58 | 111 | 4/22/2026 |
| 3.0.57 | 113 | 4/22/2026 |
| 3.0.56 | 119 | 4/14/2026 |
| 3.0.55 | 132 | 3/31/2026 |
| 3.0.54 | 118 | 3/20/2026 |
| 3.0.53 | 132 | 3/14/2026 |
| 3.0.52 | 125 | 3/10/2026 |
| 3.0.51 | 128 | 3/3/2026 |
| 3.0.50 | 252 | 3/1/2026 |