Releases: livedcode/ModernBCL.Solution
v1.2.1 – DateOnly/TimeOnly, Index/Range Polyfills & Unified Slicing
🚀 ModernBCL.Core.BLC v1.2.1
This release finalizes the modern BCL surface area for .NET Framework 4.8 / 4.8.1, focusing on behavioral parity, clarity, and developer ergonomics, without requiring runtime or language upgrades.
✨ Added
System.DateOnly and System.TimeOnly polyfills
Full arithmetic support (AddDays, AddYears, etc.)
Correct day-number–based behavior for parity with modern .NET
System.Index and System.Range polyfills
Includes all compiler-required members
Compatible with C# lowering rules (^, ..) even when syntax is not used
Enables modern slicing semantics on legacy runtimes
Unified slicing helpers under ModernBCL.Core.Slicing
Array slicing (T[])
IList slicing
String slicing (via char[])
DateOnly / DateTime slicing scenarios
Designed for C# 7.3 (no language upgrade required)
SystemSample console applications
DateOnly / TimeOnly usage
Index / Range semantics
Practical slicing examples (date, string, list)
🔄 Changed
Consolidated all slicing helpers into a single namespace and file for better discoverability.
Clarified architectural separation between:
System polyfills (API compatibility)
ModernBCL helpers (opt-in convenience APIs)
Updated README to document new polyfills, slicing helpers, and usage patterns.
🐛 Fixed
Fixed missing compiler-required members in System.Index.
Corrected DateOnly parity issues related to day calculations.
Resolved extension-method discoverability issues by unifying slicing namespaces.
Minor API polish and stability fixes across System polyfills.
📦 Compatibility
.NET Framework 4.8 / 4.8.1 → Polyfills enabled
.NET 8+ → Native BCL APIs used automatically
NuGet multi-targeting: net48; net481; net8.0
📄 Notes
No breaking changes.
No runtime or language version upgrades required.
Designed for long-lived enterprise .NET Framework systems.
ModernBCL.Core v1.2.0 – Multi-Targeting, 64-bit Hashing, and Enhanced Guard API
🎉 ModernBCL.Core v1.2.0
A major modernization release for .NET Framework developers
This release delivers fully modern BCL functionality to legacy .NET Framework apps—bringing support for high-performance hashing, advanced guard APIs, multi-targeting, and professional-grade debugging via SourceLink.
This is the most significant upgrade to ModernBCL.Core to date.
🚀 New in v1.2.0
✨ Multi-Targeting Support
ModernBCL.Core now builds against 3 frameworks:
net48
net481
net8.0 (for benchmarking & forward compatibility)
The library automatically switches between the polyfill and native implementations.
🧮 High-Performance Hashing Upgrades
✔ New: HashAccumulator64
A 64-bit hashing pipeline with extremely low collision probability—ideal for:
dictionary keys
caching
large collections
custom comparer scenarios
✔ Improved HashCode Polyfill
The polyfill is now:
fully deterministic
non-commutative
zero-allocating
aligned with .NET 7/8 HashCode semantics
✔ New comparer suite
Included:
ObjectHashComparer
EnumerableHashComparer
SequenceHashComparer
Each comparer is optimized for order sensitivity and type safety.
🔐 Modern Guard API (Full Fluent Syntax)
The new fluent guard system provides modern, expressive validation on .NET 4.8:
Guard.Against(value).Null();
Guard.Against(text).NullOrWhiteSpace();
Guard.Against(number).OutOfRange(0, 100);
Includes automatic parameter name capture via a polyfilled [CallerArgumentExpression].
🔬 Extensive Fuzz Testing
New fuzz test coverage ensures reliability across millions of random cases:
HashAccumulator fuzz tests
HashAccumulator64 fuzz tests
Guard API fuzz tests
Comparer fuzz tests
This significantly increases the safety and correctness of all hashing and validation features.
📊 Benchmarking Project (net8.0)
A dedicated BenchmarkDotNet project has been added:
ModernBCL.Benchmarks/
Benchmarks include:
Polyfill HashCode vs native HashCode
HashAccumulator32 vs HashAccumulator64
Guard API overhead
Comparer performance
Benchmark results are emitted in:
HTML
Markdown
CSV
🛠 Project Structure Improvements
This release includes a major cleanup and restructuring:
Clear separation of polyfills, hashing, guards, extensions, and comparers
Multi-TFM build adjustments
Removal of duplicate compile includes
Type conflict fixes for System.HashCode
Enriched NuGet metadata
📦 NuGet Package Enhancements
Version 1.2.0 ships with full NuGet best practices:
Rich PackageTags for search
PackageReadmeFile for rendering README on NuGet.org
MIT license metadata
Symbol packages (.snupkg)
Embedded SourceLink for debugging into your package
Automatic reproducible builds
Developers consuming the package can now step into the library’s source code directly from GitHub during debugging.
🧾 Full Changelog
See:
📄 CHANGELOG.md
Included inside the package and in the repository root.
📥 Installation
dotnet add package ModernBCL.Core.BLC --version 1.2.0
or via NuGet Package Manager:
Install-Package ModernBCL.Core.BLC -Version 1.2.0
❤️ Thank You
Your feedback drives this project forward.
If you find this library helpful, please ⭐ star the repo or share it with others maintaining .NET Framework applications.
ModernBCL.Core.BLC v1.1.1: Support both .net 4.8 and .net 4.8.1
[ModernBCL.Core.BLC v1.1.1: improve .NET Framework support.
(https://github.com/livedcode/ModernBCL.Solution/releases/tag/v1.1.1) Latest
The main feature introduced broader .NET Framework support.
🚀 Key Features and Improvements (v1.1.1)
-
Support both .net4.8 and .net4.8.1
-
Core Updates
📦 Installation
To get this version, install it via NuGet:
Install-Package ModernBCL.Core.BLC -Version 1.1.1
Full Changelog: v1.1.0...v1.1.1
ModernBCL.Core.BLC v1.1.0: Introducing ThrowHelper Guard Clauses
This release marks a significant expansion of the ModernBCL.Core library beyond just hashing, focusing on improving developer quality-of-life and code cleanliness in .NET Framework 4.8 projects.
The main feature introduced is a comprehensive polyfill for modern argument validation.
🚀 Key Features and Improvements (v1.1.0)
1. Modern Argument Validation
Introduced the static ThrowHelper class which provides concise, modern guard clauses, eliminating the need for verbose if (null) checks in constructors and methods.
ThrowHelper.ThrowIfNull(T value): ThrowsArgumentNullException.ThrowHelper.ThrowIfNullOrEmpty(string value): ThrowsArgumentExceptionif the string is null or"".ThrowHelper.ThrowIfNullOrWhiteSpace(string value): ThrowsArgumentExceptionif the string is null, empty, or only whitespace.
These methods leverage polyfilled attributes (like [CallerArgumentExpression]) to automatically capture the parameter name (nameof(arg)), simplifying code dramatically.
2. Core Updates
- Package ID Change: Renamed the primary package ID from
ModernBCL.Core.HashCodetoModernBCL.Core.BLC. - Version Bump: Updated project file (
.csproj) and documentation to v1.1.0. - Documentation: Updated
README.mdwith clear usage examples forThrowHelper.
📦 Installation
To get this version, install it via NuGet:
Install-Package ModernBCL.Core.BLC -Version 1.1.0