Skip to content

NotNotTech/NotNot-MonoRepo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NotNot-MonoRepo

A collection of open source C# NuGet packages for .NET development.

License: MPL-2.0


Published Packages

Strongly-Typed appsettings.json via Source Generator

NuGet

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.AppSettings

Quick 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*.json files into a unified schema
  • Works with or without Dependency Injection
  • Supports extending generated classes via partial classes

Full Documentation →


Pre-Release Packages

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 Problem types
  • 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 time

Status: 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
  • _ResPath class with compile-time asset path constants
  • Auto-configured via MSBuild .props and .targets

Note: Requires the NotNot.GodotNet library (currently private). Contact maintainer if interested.


Deprecated Packages

NotNot.SimStorm

Asynchronous execution framework with node-based architecture. Superseded by SlimGraph in private development.

NotNot.Server

Server utilities rolled into NotNot.Bcl and NotNot.Bcl.Core.


Examples

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

Repository Structure

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

Why MonoRepo?

  • 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

Build Configurations

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.


Contributing

  1. Find or create an issue describing the change
  2. Fork and create a branch from master
  3. Make changes following existing code conventions
  4. Test thoroughly - run affected example projects
  5. Submit PR with clear description

Local Development

For rapid iteration, use Debug configuration which references local projects:

<ProjectReference Include="..\NotNot.AppSettings\NotNot.AppSettings.csproj"
                  OutputItemType="Analyzer"
                  ReferenceOutputAssembly="false" />

Versioning

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

License

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.Mixins is MIT licensed (ported from InlineComposition).


Contact


Formerly hosted at various locations including https://github.com/jasonswearingen/NotNot.AppSettings

About

FOSS C# Projects licensed MPL-2.0

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages