A collection of open source C# NuGet packages for .NET development.
Strongly-Typed appsettings.json via Source Generator
Automatically generate strongly-typed C# classes from your appsettings.json files at compile time. No runtime reflection, just clean, type-safe configuration access.
dotnet add package NotNot.AppSettingsQuick Start:
// appsettings.json
{
"Database": {
"ConnectionString": "Server=localhost;Database=MyApp"
}
}// Generated class available after build
var settings = AppSettingsBinder.LoadDirect();
Console.WriteLine(settings.Database.ConnectionString);
// Or with DI
builder.Services.AddSingleton<IAppSettingsBinder, AppSettingsBinder>();Features:
- Zero runtime overhead - all parsing happens at compile time
- Merges all
appsettings*.jsonfiles into a unified schema - Works with or without Dependency Injection
- Supports extending generated classes via partial classes
These packages are functional but not yet published to NuGet. They may have breaking changes.
Opinionated Base Class Library for Professional .NET Development
A "kitchen sink" utility library with a clean architectural split:
| Package | Purpose | Dependencies |
|---|---|---|
NotNot.Bcl.Core |
Core utilities, Maybe pattern, extensions | Pure .NET (no web) |
NotNot.Bcl |
ASP.NET Core integration, web utilities | ASP.NET Core |
Highlights:
- Maybe Pattern - Functional error handling with structured
Problemtypes - Pooled Memory Abstractions -
Mem<T>,RefMem<T>,SpanGuard<T>for low-GC allocations - OpenGenericMethodExecutor - Reflection utilities for creating delegates from generic methods
- Extension Methods - Prefixed with
_for easy discovery (e.g.,myList._Shuffle())
Source Generator for Inline Composition/Mixins Pattern
Port of InlineComposition - compose classes by inlining members from other classes.
[InlineComposition<LoggerMixin>]
public partial class MyService { }
// Members from LoggerMixin are inlined into MyService at compile timeStatus: Initial port from InlineComposition v1.5.0. Same-project inlining works; cross-assembly support planned.
Opinionated Code Analyzers
Custom Roslyn analyzers for code quality:
- Banned APIs - Block usage of problematic APIs
- Task Awaited on Return - Enforce async best practices
Source Generators & Analyzers for Godot Engine (.NET)
Compile-time safety for Godot C# development:
| Diagnostic | Purpose |
|---|---|
GODOT001 |
Null safety in _ExitTree() overrides |
GODOT002 |
Prohibited API detection (e.g., MultiMesh.CustomAabb) |
GODOT003 |
Exception safety in Dispose() methods |
Features:
[NotNotSceneRoot]attribute for type-safe scene instantiation_ResPathclass with compile-time asset path constants- Auto-configured via MSBuild
.propsand.targets
Note: Requires the
NotNot.GodotNetlibrary (currently private). Contact maintainer if interested.
Asynchronous execution framework with node-based architecture. Superseded by SlimGraph in private development.
Server utilities rolled into NotNot.Bcl and NotNot.Bcl.Core.
Example projects demonstrating package usage:
| Example | Description |
|---|---|
| NotNot.AppSettings.Example | DI and non-DI usage patterns |
| NotNot.AppSettings.StandaloneExample | Minimal standalone usage |
| NotNot.Bcl.Example.HelloConsole | Console app with BCL utilities |
NotNot-MonoRepo/
├── src/
│ ├── nuget/ # NuGet package sources
│ │ ├── NotNot.AppSettings/ # Published
│ │ ├── NotNot.Bcl/ # Pre-release
│ │ ├── NotNot.Bcl.Core/ # Pre-release
│ │ ├── NotNot.Mixins/ # Pre-release
│ │ ├── NotNot.Analyzers/ # Pre-release
│ │ └── NotNot.GodotNet.SourceGen/ # Pre-release
│ └── example/ # Example projects
├── contrib/ # Contributing documentation
├── meta/ # Package metadata (logos, etc.)
└── vm-scripts/ # Development VM scripts
- Unified build/test - Build breaks are immediately visible across packages
- Shared infrastructure - Common MSBuild targets via
CommonSettings.targets - Easy local development - Debug/Release configurations switch between project references and NuGet packages
| Configuration | Behavior |
|---|---|
Debug |
Uses local project references for rapid development |
Release |
Uses published NuGet packages for validation |
See creating-nuget-packages.md for detailed workflows.
- Find or create an issue describing the change
- Fork and create a branch from
master - Make changes following existing code conventions
- Test thoroughly - run affected example projects
- Submit PR with clear description
For rapid iteration, use Debug configuration which references local projects:
<ProjectReference Include="..\NotNot.AppSettings\NotNot.AppSettings.csproj"
OutputItemType="Analyzer"
ReferenceOutputAssembly="false" />Packages use MinVer for semantic versioning:
- Tag format:
{PackageName}-{Major}.{Minor}.{Patch}(e.g.,NotNot.AppSettings-2.0.3) - Tags trigger version updates on next build
MPL-2.0 - Mozilla Public License 2.0
From TLDRLegal:
MPL is a copyleft license that is easy to comply with. You must make the source code for any of your changes available under MPL, but you can combine the MPL software with proprietary code, as long as you keep the MPL code in separate files.
In brief: Use freely in commercial projects. Changes to MPL files must be open-sourced; your proprietary code stays proprietary.
Note: Exception:
NotNot.Mixinsis MIT licensed (ported from InlineComposition).
- Issues: GitHub Issues
- Author: Novaleaf / Jason Swearingen
Formerly hosted at various locations including https://github.com/jasonswearingen/NotNot.AppSettings