Skip to content
CAI
Software that uses CAICheck a score

ldqk/Masuit.Tools

31.5

Weak · 23 September 2026

40.7k

lines of production code

C#

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a comprehensive .NET utility library providing a wide array of helper classes and extension methods for common development tasks. It covers diverse domains including file handling, image processing, data validation, and database interactions, while also offering specialized features like resumable file downloads and digital watermarking. The library is designed to integrate seamlessly with ASP.NET Core and Entity Framework Core, extending standard web and data access patterns with convenient, reusable components.

How it got here

2017–2020 — comprehensive utility expansion

36 changes.

This period focused on significantly expanding the library's feature set by adding extensive utilities across domains including web handling, data processing, security, and hardware abstraction. The work involved migrating core components to modern standards like .NET 10 and SkiaSharp while introducing new capabilities such as resumable file downloads, multi-threaded downloading, and advanced Chinese calendar support. Comprehensive unit testing was also implemented to validate these new features and ensure stability across the growing codebase.

2021–2023 — ASP.NET Core and utility expansion

18 changes.

This period focused on expanding the library's capabilities for ASP.NET Core, introducing features such as resumable file downloads, automatic service registration, and distributed caching. It also added significant utility modules for file type detection, image processing, and Windows anti-virus scanning, alongside enhancements to database change tracking and dynamic object handling.

2024–2025 — New utility libraries and extensions

5 changes.

This period focused on expanding the toolkit with new specialized libraries, including a text diffing engine, a blind digital watermarking system for images, and configurable INI file handling. It also involved adding extension methods to resolve interface ambiguities and establishing comprehensive test coverage for the new watermarking features.

Features

Add ByteRange record struct for HTTP range requests

A new \ByteRange\ record struct has been added to the internal MVC utilities to represent start and end positions for byte ranges. This type supports equality comparison and hashing, providing the foundational data structure required for implementing HTTP range request handling and features like resumable downloads.

Masuit.Tools/Mvc/Internal · high confidence

Add resume-capable file result types for ASP.NET Core

Introduces a new set of file result classes (ResumeFileContentResult, ResumeFileStreamResult, ResumePhysicalFileResult, and ResumeVirtualFileResult) that extend the standard ASP.NET Core file results to support HTTP range requests. By enabling range processing and supporting ETags, these results allow clients to resume interrupted downloads, improving reliability for large file transfers.

Masuit.Tools.AspNetCore/AspNetCore/ResumeFileResult · high confidence

Add support for resumable file downloads and HTTP header constants

The library now includes extension methods on the MVC controller to return \ResumeFileResult\ objects, enabling clients to resume interrupted downloads and support multi-threaded downloading via HTTP range requests. Additionally, a new \HttpHeaders\ class provides strongly-typed constants for common HTTP headers (such as \Content-Disposition\, \ETag\, and \Range\) to simplify header management in responses.

Masuit.Tools/Mvc · high confidence

Add support for resumable file downloads with range requests

Introduces a new set of MVC ActionResults (ResumeFileResult, ResumeFilePathResult, ResumeFileContentResult, ResumeFileStreamResult, and ResumeActionResultBase) that enable clients to resume interrupted downloads. These results handle HTTP Range headers to serve partial content, support multipart/byteranges for multiple simultaneous ranges, and implement standard caching preconditions (ETag, Last-Modified, If-Match, If-None-Match, If-Modified-Since, If-Unmodified-Since) to ensure data consistency during resumption.

Masuit.Tools/Mvc/ActionResults · high confidence

Added ASP.NET Core test application scaffolding

A new test application project (NetCoreTest) has been added, providing a minimal ASP.NET Core Web API setup. It includes Program.cs to configure controllers, Swagger, and API Explorer, along with standard appsettings files for development and general configuration, enabling local testing of the library's model binder and other features.

NetCoreTest · high confidence

Added IDictionaryExtensions.TryAdd to resolve method ambiguity

A new extension method TryAdd has been added to the IDictionary interface, allowing users to safely add key-value pairs only if the key does not already exist. This implementation resolves potential ambiguity with existing Dictionary.TryAdd methods by providing a consistent extension-based approach for any IDictionary implementation.

Masuit.Tools/Systems · high confidence

Added JSON serialization helpers for ASP.NET Core sessions

A new WebExtension class provides Set and Get methods for ISession, enabling objects to be stored and retrieved as JSON strings. The Get method automatically deserializes the stored JSON into the requested type, and returns a default instance for generic types in the System.Collections.Generic namespace when the session value is missing.

Masuit.Tools.AspNetCore/Net · high confidence

Added executors for resumable file results

The library now includes dedicated executors for its custom resumable file result types (ResumeFileContentResult, ResumeFileStreamResult, ResumePhysicalFileResult, and ResumeVirtualFileResult). These executors ensure that file downloads are served with an inline content disposition header, allowing users to resume interrupted downloads seamlessly.

Masuit.Tools.AspNetCore/AspNetCore/Executor · high confidence

Added folder-based publish profile for .NET Standard 2.1

A new publish profile (FolderProfile.pubxml) has been added to the project, configuring the application to publish to a local file system directory (bin\\Release\\PublishOutput) targeting the netstandard2.1 framework. This enables users to easily deploy the library's output to a specific folder without relying on cloud or IIS publishing targets.

Masuit.Tools.Core/Properties · high confidence

Excel export gains column formatting and property filtering

The Excel export library now supports applying specific cell formats to columns via the new \ColumnFormatAttribute\ and \ColumnSettings\ API, allowing users to define custom number or text formats for individual or multiple columns. Additionally, the \ExportIgnoreAttribute\ has been introduced to allow properties to be excluded from the exported Excel output, giving developers finer control over which data fields are included.

Masuit.Tools.Excel · high confidence

Expanded file format detection support

The file type detection system has been significantly expanded with the addition of new detectors for a wide variety of file formats. This update introduces support for Android packages (APK), Apple disk images (DMG), Windows executables and dynamic link libraries (EXE, DLL), Microsoft Office legacy formats (DOC, XLS, PPT), OpenDocument formats (ODF, ODG), and various multimedia files including images (BMP, GIF, ICO, JPEG, JPEG2000, JPEG XR, KTX), audio (FLAC, MP3, MIDI, OGG, M4A), and video (AVI, FLV, M4V, MP4). It also adds detection for compressed archives (BZ2, CAB, GZ, ISO, LZH, MPQ), system files (INI, CONFIG), and other specialized formats like Bash scripts, certificates, and Hancom HWP documents, allowing the application to accurately identify these file types based on their content signatures.

Masuit.Tools.Abstractions/Files/FileDetector/Detectors · high confidence

Initial release of MongoDB client library with thread-local instance management

This change introduces the Masuit.Tools.NoSQL.MongoDBClient package, providing a wrapper around the MongoDB C\# driver. It adds a MongoDbClient class that supports both standard singleton and thread-local instance retrieval via CallContext, enabling safer usage in asynchronous contexts. The client exposes methods for inserting single or multiple documents (synchronous and asynchronous), bulk insertions, and collection access, along with internal utilities like a ConcurrentLimitedQueue for managing operation limits.

Masuit.Tools.NoSQL.MongoDBClient · high confidence

Initial repository structure and documentation

The repository is initialized with the core solution structure, including project files for Masuit.Tools.Core, Masuit.Tools.Abstractions, and various test and utility packages. Essential documentation files such as README.md, CODE\_OF\_CONDUCT.md, CONTRIBUTING.md, and SECURITY.md are added to define project usage, community guidelines, and security policies. A Directory.Build.props file sets the initial version to 2026.3.3, and standard gitignore rules are configured.

(repo-wide) · high confidence

Introduce MIME type mapping utilities

Added a new MIME type mapping system including the \ContentType\ static class with standard MIME constants, the \DefaultMimeItems\ collection for extension-to-MIME mappings, and the \MimeMapper\ class implementing \IMimeMapper\ to resolve MIME types from file extensions or paths.

Masuit.Tools.Abstractions/Mime · high confidence

Introduce blind digital watermarking for images

Added the Masuit.Tools.DigtalWatermarker library, which embeds and extracts invisible, robust digital watermarks in images using DCT and QIM techniques. Users can now protect image copyright and enable content tracing by embedding a watermark image into a source image (via file paths, Mat objects, or streams) and later extracting the hidden watermark, even after common attacks like compression or cropping.

Masuit.Tools.DigtalWatermarker · high confidence

Introduces automatic parameter binding from multiple request sources

Adds a new \FromBodyOrDefaultModelBinder\ and associated middleware to the ASP.NET Core pipeline, allowing action parameters to be automatically populated from the request body, query string, form data, headers, cookies, or route data. Developers can use the \\[FromBodyOrDefault\]\ attribute to specify which sources to check and provide default values, simplifying parameter acquisition for simple types and complex objects without manual extraction logic.

Masuit.Tools.AspNetCore/ModelBinder · high confidence

Introduces extensible file type detection framework

The FileDetector module now provides a comprehensive, extensible system for identifying file types by content rather than just extension. It introduces an IDetector interface and a suite of abstract base classes (AbstractSignatureDetector, AbstractCompoundFileDetailDetector, AbstractZipDetailDetector, etc.) that handle specific detection strategies like magic bytes, compound file structures, and zip archives. A central FileSignatureDetector class automatically discovers and registers all available detectors at runtime, allowing the library to accurately identify the true format of files (such as MP4 or Visio) and return their correct MIME types and categories.

Masuit.Tools.Abstractions/Files/FileDetector · high confidence

Introduction of a new file-based logging component

The library now includes a new logging subsystem in the \Masuit.Tools.Logging\ namespace, consisting of \LogManager\, \LogInfo\, and \LogLevel\. This component provides static methods for writing Info and Debug level logs to text files, automatically managing a background queue for asynchronous writes. Users can configure the log storage directory via the \LogDirectory\ property, which defaults to a \logs\ folder in the application's base directory, and can subscribe to log events via the \Event\ delegate to receive structured \LogInfo\ objects containing timestamps, thread IDs, log levels, and message details.

Masuit.Tools.Abstractions/Logging · high confidence

New ASP.NET Core extensions for distributed caching, multipart requests, and SQL Server query optimization

This update introduces several new capabilities to the Masuit.Tools.AspNetCore library. Developers can now use the new DistributedCacheExt extension methods to simplify storing and retrieving typed objects in IDistributedCache with automatic JSON serialization. A new MultipartRequestService (registered via AddMultipartRequestService) provides a convenient way to parse multipart form data, extracting both form fields and file contents. Additionally, a new DisableFormValueModelBindingAttribute allows developers to easily disable default form value providers for specific controllers or actions, and the WithNoLockInterceptor offers a global or opt-in mechanism to append WITH (NOLOCK) to SQL Server queries for improved read performance, replacing the deprecated QueryWithNoLockDbCommandInterceptor.

Masuit.Tools.AspNetCore/Extensions · high confidence

New EF Core AddOrUpdate extension and automatic service registration

The AspNetCore library now includes a new \DbSetExtensions\ class providing an \AddOrUpdate\ method for Entity Framework Core, which upserts entities based on a key selector while respecting \\[Key\]\ and the new \\[UpdateIgnore\]\ attributes, and optionally ignoring navigation properties. Additionally, \ServiceCollectionExtensions\ introduces an \AutoRegisterServices\ feature that automatically scans assemblies for types marked with \\[ServiceInject\]\ or implementing \IScoped\, \ITransient\, or \ISingleton\ interfaces, and registers them in the DI container with the appropriate lifetime.

Masuit.Tools.AspNetCore/AspNetCore · high confidence

New EF Core change-tracking API for entity modifications

The \Masuit.Tools.Core/Database\ namespace now exposes extension methods on \DbContext\ to inspect and retrieve detailed change information for entities. Users can call \GetChanges\, \GetAdded\, and \GetRemoved\ to obtain lists of \ChangeEntry\ objects, which contain the entity instance, its state, and a list of \ChangePropertyInfo\ detailing original and current values for modified fields. This allows applications to programmatically audit or log database operations without relying solely on EF Core's internal change tracker state.

Masuit.Tools.Core/Database · high confidence

New LINQ expression combination methods added

The library now includes new LINQ extension methods for combining boolean expressions: \And\, \Or\, \AndIf\, and \OrIf\. These methods allow developers to programmatically construct complex query predicates by logically joining existing \Expression\<Func\<T, bool\>\>\ conditions, with conditional variants that skip combination when a specified condition is false.

Masuit.Tools.Abstractions/Linq · high confidence

New TextDiff library with HTML diff and merge capabilities

Added a new TextDiff component to Masuit.Tools.Abstractions, providing text comparison and patching functionality. This includes core diff algorithms (Myers, Bitap), HTML diffing that wraps changes in \<del\> and \<ins\> tags, and a new HtmlDiffMerge method that supports a maxUnchangedLength parameter to control the merging of unchanged text segments. The implementation is compatible with .NET Standard 2.0 and later.

Masuit.Tools.Abstractions/TextDiff · high confidence

New Windows anti-virus scanning capabilities via AMSI and Windows Defender

This change introduces new anti-virus scanning services within the Masuit.Tools.Win32.AntiVirus namespace. It adds AmsiScanService, which leverages the Windows Antimalware Scan Interface (AMSI) to scan files, streams, and byte buffers directly in memory, and WindowsDefenderScanService, which invokes the Windows Defender command-line tool (MpCmdRun.exe) to scan files, streams, and directories. Supporting types include AmsiResult and ResultCode enums, ScanResult, and SystemParameter constants for locating system components, enabling applications to detect malware on Windows platforms.

Masuit.Tools.Abstractions/Win32/AntiVirus · high confidence

New Windows system utilities and command execution helpers

Added new static classes in the Masuit.Tools.Win32 namespace to provide Windows-specific system management capabilities. The Windows class introduces methods for clearing system memory (ClearMemory, ClearMemorySilent), retrieving OS version details, and monitoring per-process CPU usage via performance counters. Additionally, the WindowsCommand class provides a utility to execute CMD commands and capture their output with optional timeout support, while the Windows class also includes a method to run external applications and retrieve their console output.

Masuit.Tools.Abstractions/Win32 · high confidence

New async and no-lock pagination extensions for IQueryable

Added new extension methods to IQueryableExt that allow generating paginated lists from IQueryable sources. This includes ToPagedListAsync and ToPagedListNoLockAsync for asynchronous operations, as well as ToPagedListNoLock for synchronous queries, enabling users to perform pagination with optional 'no lock' hints to improve database query performance.

Masuit.Tools.Core/Models · high confidence

New base type extension methods for collections, dictionaries, and conversions

This change introduces a comprehensive set of new extension methods in the Masuit.Tools.Abstractions library, organized under the BaseType folder. For collections, it adds LINQ-style operations including IntersectBy, ExceptBy, DistinctBy, and IntersectAll, allowing users to filter and compare sequences by specific keys or conditions. Dictionary handling is enhanced with AddOrUpdate overloads for standard, nullable, and concurrent dictionaries, enabling safe merge operations without key-conflict exceptions. Type conversion capabilities are expanded with robust IConvertible and ValueTypeConvertExtensions, providing safe TryConvertTo methods, decimal rounding with configurable modes, and conversions between numeric types (e.g., double to decimal). Additionally, new utilities include base-N conversion for integers and BigIntegers, IP address private-range detection (supporting IPv4 and IPv6), and stream manipulation methods like ToArray and SaveAsMemoryStream.

Masuit.Tools.Abstractions/Extensions/BaseType · high confidence

New concurrency primitives and JSON serialization controls in Masuit.Tools.Abstractions

This update introduces several new thread-safe collection types to the Systems namespace, including ConcurrentHashQueue, ConcurrentHashSet, ConcurrentLimitedQueue, ConcurrentLinkedList, ConcurrentList, and DisposableConcurrentDictionary, providing developers with specialized data structures for concurrent scenarios. It also adds a WeightedSelector component in the RandomSelector namespace for picking items based on assigned weights, and enhances JSON serialization via Newtonsoft.Json with new contract resolvers (CompositeContractResolver, DeserializeOnlyContractResolver, FallbackJsonPropertyResolver) and attributes (DeserializeOnlyJsonPropertyAttribute, SerializeOnlyJsonPropertyAttribute) that allow fine-grained control over which properties are serialized or deserialized.

Masuit.Tools.Abstractions/Systems · high confidence

New configuration helper and CAPTCHA generation utilities

This release introduces two new capabilities for .NET Framework 4.5 applications. First, a new \ConfigHelper\ class in the \Masuit.Tools.Config\ namespace provides a convenient way to read application settings, including support for deserializing JSON values into strongly-typed objects. Second, a new \ValidateCode\ class in the \Masuit.Tools.Strings\ namespace allows developers to generate random CAPTCHA codes and render them as JPEG images with customizable fonts, colors, and noise patterns, integrating directly with the ASP.NET \HttpContext\.

Masuit.Tools.Net45/Config · high confidence

New domain models and tree data utilities added to abstractions

The \Masuit.Tools.Abstractions/Models\ namespace now includes several new model classes and interfaces to support specific domain logic. A \VersionNumber\ record provides structured versioning with comparison and parsing capabilities. Tree data structures are enhanced with \ITree\, \ITreeChildren\, and \ITreeParent\ interfaces, a \Tree\<T\>\ class, and \TreeExtensions\ that offer non-recursive flattening and conversion of flat collections into hierarchical trees. Additional models include \DateTimeRange\ for time period overlap and union operations, \PagedList\<T\>\ for pagination data, \LoanModel\ for mortgage and loan repayment calculations, and geometric models \Circle\ and \Sphere\ for distance and intersection calculations. Email functionality is supported by new \Email\ and \EmailAddress\ classes, with the latter performing DNS lookups for SMTP servers.

Masuit.Tools.Abstractions/Models · high confidence

New dynamic object system with behavior-driven extensibility

The library introduces a new dynamic object framework centered on the \Clay\ class, allowing users to create flexible, dynamic objects with custom behaviors. This system supports array-like operations (indexing, adding, removing items) via \ArrayBehavior\, factory patterns for creating new objects via \ClayFactoryBehavior\, and interface proxying to bridge dynamic objects with static interfaces. Users can now define and compose custom behaviors to handle member access, method invocation, and type conversion, enabling more expressive and dynamic data structures.

Masuit.Tools.Abstractions/Extensions/Dynamics · high confidence

New extension methods for resumable file downloads in ASP.NET Core controllers

Added new extension methods to the ControllerBase class that return specialized file result types (ResumeFileContentResult, ResumeFileStreamResult, ResumeVirtualFileResult, and ResumePhysicalFileResult) instead of standard FileResults. These methods enable HTTP range requests, allowing users to resume interrupted downloads and support multi-threaded downloading. The extensions automatically handle MIME type mapping and allow specifying custom ETags for caching control.

Masuit.Tools.AspNetCore/AspNetCore/Extensions · high confidence

New file utility extensions, 7z compression, and text encoding detection

This update introduces three new capabilities in the file handling area. First, FileExt adds stream-based methods to copy large files and save memory streams to disk, along with utilities to compute MD5, SHA1, SHA256, and SHA516 hashes. Second, the SevenZipCompressor now supports compressing files and folders into streams (PooledMemoryStream) for scenarios like web downloads, and decompresses archives while automatically detecting the archive type. Third, a new TextEncodingDetector can identify the encoding of text files or streams by analyzing byte order marks.

Masuit.Tools.Abstractions/Files · high confidence

New hardware information model classes and sensor support

The hardware abstraction layer now exposes dedicated model classes for BIOS (including GUID/UUID), CPU, disk, and RAM information, alongside enums for disk and network data types. It also introduces a new sensor subsystem (SensorTypes, SensorValue) to read hardware sensor data such as temperature and voltage, and adds a method to retrieve per-process CPU usage statistics.

Masuit.Tools.Abstractions/Hardware · high confidence

New image processing and watermarking utilities

Added ImageUtilities and ImageWatermarker classes to the Media namespace. ImageUtilities provides static methods for image manipulation, including square cropping with scaling (optimized for avatars) and custom dimension cropping with quality control. ImageWatermarker allows adding text watermarks to images with configurable position, color, font size, and anti-aliasing, including an option to skip small images.

Masuit.Tools.Net45/Media · high confidence

New mathematical and geometric utility classes added

Added several new static classes and types to the Masuit.Tools.Maths namespace: CoordinateConvert for converting between WGS84, GCJ-02, and BD-09 geographic coordinate systems; PercentileSelector for finding percentile elements in collections using QuickSelect; Point2D and Vector2D for 2D geometric operations with operator overloads; and RadarChart along with RadarChartEngine for generating radar chart points, computing polygon areas, and calculating intersections between radar charts.

Masuit.Tools.Abstractions/Maths · high confidence

New multi-threaded file downloader with progress and completion events

The \Masuit.Tools.Abstractions/Net\ namespace now includes a \MultiThreadDownloader\ class that splits file downloads into multiple parts for faster retrieval. Users can configure the number of download threads, temporary storage directory, and final save path. The API exposes progress tracking via \TotalProgressChanged\ and \TotalSpeedInBytes\, as well as completion notifications through \FileMergedComplete\ and \FileMergeProgressChanged\ events, allowing applications to monitor and react to the download lifecycle.

Masuit.Tools.Abstractions/Net · high confidence

New reflection utilities and enum description attribute

The library introduces a new \EnumDescriptionAttribute\ to support localized enum descriptions via \Display\ and \Language\ properties, and adds a \ReflectionUtil\ class that provides reflection helpers for invoking methods and getting/setting fields and properties. The property setter now supports nullable types and automatic conversion, while property getters use a delegate cache to improve performance.

Masuit.Tools.Abstractions/Reflection · high confidence

New security utilities: CRC32/64, Zero-Width Codec, and PooledMemoryStream integration

The Masuit.Tools.Abstractions/Security namespace now includes new capabilities for data integrity and steganography. Users can generate 32-bit and 64-bit CRC checksums via the new Crc32 and Crc64 classes, which implement the HashAlgorithm interface. A new ZeroWidthCodec class allows encoding hidden messages into text using zero-width Unicode characters. Additionally, the existing Encrypt and RSA implementations have been updated to utilize PooledMemoryStream for improved memory efficiency during cryptographic operations.

Masuit.Tools.Abstractions/Security · high confidence

New string utilities: base conversion, SimHash, templating, and SkiaSharp-based validation codes

The Masuit.Tools.Abstractions/Strings namespace now includes several new capabilities. NumberFormater and UnicodeFormater support custom base conversions (up to 94 and 91 bases respectively) with configurable character sets and start-value offsets. SimHash provides string similarity hashing with Hamming distance comparison. Template enables simple variable substitution in string templates. ValidateCode generates CAPTCHA images using SkiaSharp, featuring gradient text, noise, and interference lines, and includes helper methods for string width measurement.

Masuit.Tools.Abstractions/Strings · high confidence

New test controller demonstrating FromBodyOrDefault binding

A new HomeController has been added to the NetCoreTest project to serve as a test endpoint for the custom FromBodyOrDefaultModelBinder. It exposes a POST /test route that accepts a complex object (MyClass) and a string parameter, binding them from either the request body or query string as configured by the binder's BindType flags.

NetCoreTest/Controllers · high confidence

New validation attributes for passwords, emails, and business identifiers

The Validator namespace now includes several new data-validation attributes: ComplexPasswordAttribute allows configuring requirements for digits, letters, and symbols in passwords; IsEmailAttribute supports domain whitelisting/blacklisting and optional DNS/MX record verification; UnifiedSocialCreditCodeAttribute validates Chinese enterprise credit codes; and additional attributes (EnumOfAttribute, NotNullOrEmptyAttribute, IsIPAddressAttribute, IsPhoneAttribute, LandlineAttribute, MinItemsCountAttribute, MinValueAttribute, MaxValueAttribute) provide validation for enums, non-null/non-empty values, IP addresses, phone numbers, landlines, collection item counts, and numeric min/max bounds.

Masuit.Tools.Abstractions/Validator · high confidence

New web utility helpers for caching, cookies, and session management

This update introduces several new helper classes in the Masuit.Tools.Net namespace to simplify common web operations. CacheHelper provides extension methods and a singleton instance for managing application-level caching with support for timeouts and expiration policies. CookieHelper adds utilities for reading, setting, and clearing HTTP cookies. WebExtension offers extension methods for reading and writing session state, along with a GetDbContext method that leverages CallContext to retrieve thread-local objects. Additionally, ExtensionAttach in the Files namespace allows applications to register or unregister file type associations in the Windows registry.

Masuit.Tools/Net · high confidence

Behavioural changes

Expanded Chinese Lunar Calendar support and new date range utilities

The Chinese calendar functionality has been extended to support dates from 1900 through 2100, correcting previous inaccuracies in solar term and Ganzhi day calculations. New helper methods have been added to \DateTimeHelper\ for retrieving the start and end dates of lunar months, lunar quarters, and solar terms, alongside existing Gregorian range utilities. Supporting data structures \DateInfoStruct\ and \WeekHolidayStruct\ have been introduced to manage holiday and date information more robustly.

Masuit.Tools.Abstractions/DateTimeExt · high confidence

HTML processing now uses AngleSharp instead of HtmlAgilityPack

The HTML utility methods in Masuit.Tools.Abstractions have been rewritten to use the AngleSharp library for parsing and manipulation, replacing the previous HtmlAgilityPack implementation. This change affects how HTML is processed, including XSS sanitization, tag removal, and image source matching, potentially altering parsing behavior and performance characteristics for users relying on these extension methods.

Masuit.Tools.Abstractions/Html · high confidence

Image processing engine migrated to SkiaSharp with new color and border tools

The image processing capabilities in this library have been migrated from System.Drawing to SkiaSharp, introducing a new IImageTransformer abstraction and a SkiaSharpTransformer implementation for core operations like hashing and watermarking. This change brings a comprehensive suite of new features: a configurable ImageBorderRemover that detects and crops multi-layer borders with options for contour refinement; a ColorDeltaE class supporting CIE76, CIE94, CIE2000, and CMC color difference calculations across various color spaces (RGB, CMY, CMYK, HSL, Lab, LCH, XYZ); and an enhanced ImageHasher with optimized DCT hashing using SIMD instructions. Additionally, the library now includes robust image format detection via magic bytes, supporting formats like WebP, SVG, and compressed EMF/WMF, along with new color struct definitions (CMY, CMYK, HSL, Lab, LCH, XYZ) and converters.

Masuit.Tools.Abstractions/Media · high confidence

Nullable types and empty lists handled in List-to-DataTable conversion

The \ToDataTable\ extension method in \DataTableHelper\ now correctly handles nullable value types by mapping them to their underlying non-nullable types in the resulting schema, and returns a DataTable containing only column headers (with no data rows) when the input list is empty, rather than failing or returning an empty structure.

Masuit.Tools.Abstractions/Database · high confidence

Refactored INI file handling with configurable boolean parsing

The INI file operations in Masuit.Tools.Abstractions have been refactored to support more flexible boolean value interpretation. A new BoolOptions class allows users to customize how boolean values are parsed and serialized, including support for various string representations (true/false, yes/no, on/off, 1/0) and a NonZeroNumbersAreTrue flag. The IniFile class now accepts these options during initialization, enabling more robust configuration file handling.

Masuit.Tools.Abstractions/Files/IniFile · high confidence

Unified configuration helper with .NET Framework 4.5 support

The library now provides a single \ConfigHelper\ class that abstracts configuration access across both .NET Framework and .NET Core. For .NET Framework 4.5, it reads from \App.config\ using \ConfigurationManager\, while for .NET Core and later, it uses \Microsoft.Extensions.Configuration\ to load \appsettings.json\ or custom providers via the new \AddToMasuitTools\ extension method. This change ensures consistent API usage (\GetConfigOrDefault\ and \Get\<T\>\) regardless of the target runtime.

Masuit.Tools.Abstractions/Config · high confidence

Test coverage

Added benchmarks for image hashing, stream operations, and tree structures; Added test assembly metadata; Added unit tests for AspNetCore extensions and file serving; Added unit tests for Chinese calendar, string matching, HTML, LINQ, number formatting, RSA, and template features; Added unit tests for DigitalWatermarker; Added unit tests for MVC MimeMapper and ResumeFileResult; Added unit tests for core library utilities; Added web test harness for ResumeFileResults.

Dependencies

Upgrade to .NET 10 and update core dependencies

The project now targets .NET 10.0 across its core libraries, ASP.NET Core integration, and test suites, alongside .NET 9, 8, 6, and standard 2.0/2.1. This upgrade includes bumping Microsoft.EntityFrameworkCore to version 10.0.12, updating Newtonsoft.Json to 13.0.4, and refreshing other dependencies like SkiaSharp (4.152.1) and EPPlus (8.7.0) to ensure compatibility with the new runtime.

(dependencies) · high confidence

Housekeeping

Updated code inspection settings for C\# language level

The project now includes a .DotSettings file that configures the C\# language level to 'Latest' for code inspections, ensuring that static analysis tools recognize the most recent C\# language features supported by the IDE.

Masuit.Tools.Net45 · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 37 → 31 (-5.3)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 52 → 46 (-5.8)
  • Architecture 97 → 97 (-0.3)
  • Maturity 47 → 47 (+0.2)
  • Readiness 33 → 35 (+1.5)
  • Security 28 → 17 (-11.1)
  • Performance 59 → 58 (-0.8)

Resolved (56)

  • Bounded contexts not declared
  • Build did not complete in the analyzer
  • DbSetExtensions.AddOrUpdate (cognitive 25) (Masuit.Tools.AspNetCore/AspNetCore/DbSetExtensions.cs)
  • DbSetExtensions.AddOrUpdate (cognitive 36) (Masuit.Tools.AspNetCore/AspNetCore/DbSetExtensions.cs)
  • Duplicated block (10 lines × 2) (Masuit.Tools.Abstractions/Strings/NumberFormater.cs)
  • Duplicated block (11 lines × 2) (Masuit.Tools.Abstractions/Maths/CoordinateConvert.cs)
  • Duplicated block (11 lines × 2) (Masuit.Tools.Abstractions/Media/ImageBorderRemover.cs)
  • Duplicated block (11 lines × 2) (Masuit.Tools.Abstractions/Media/ImageHasher.cs)
  • Duplicated block (11 lines × 4) (Masuit.Tools.Abstractions/Logging/LogManager.cs)
  • Duplicated block (11 lines × 4) (Masuit.Tools.Abstractions/Logging/LogManager.cs)
  • Duplicated block (12 lines × 2) (Masuit.Tools.Abstractions/TextDiff/DiffAlgorithm.cs)
  • Duplicated block (13 lines × 2) (Masuit.Tools.Abstractions/Logging/LogManager.cs)
  • Duplicated block (13 lines × 2) (Masuit.Tools.Abstractions/Logging/LogManager.cs)
  • Duplicated block (13 lines × 2) (Masuit.Tools.Abstractions/Logging/LogManager.cs)
  • Duplicated block (13 lines × 2) (Masuit.Tools.Core/Models/IQueryableExt.cs)
  • Duplicated block (13 lines × 2) (Masuit.Tools.Core/Models/IQueryableExt.cs)
  • Duplicated block (16 lines × 2) (Masuit.Tools.Abstractions/Security/Encrypt.cs)
  • Duplicated block (18 lines × 2) (Masuit.Tools.Abstractions/Systems/ConcurrentHashQueue.cs)
  • Duplicated block (26 lines × 2) (Masuit.Tools.Abstractions/Media/ImageBorderRemover.cs)
  • Duplicated block (26 lines × 2) (Masuit.Tools.Abstractions/Media/ImageBorderRemover.cs)
  • …and 36 more

New (150)

  • Ambiguous 'GetOrAdd' semantics: One overload accepts a factory function (lazy evaluation), while the other accepts a concrete value (eager evaluation). This is a common pattern but can be confusing regarding when the value is computed/stored, and differs from standard .NET IDistributedCache.GetOrAdd which typically uses a callback.
  • Build failed
  • ChineseCalendar.IsWorkDay.get (cognitive 25) (Masuit.Tools.Abstractions/DateTimeExt/ChineseCalendar.cs)
  • ChineseCalendar.IsWorkDay.get (cyclomatic 19) (Masuit.Tools.Abstractions/DateTimeExt/ChineseCalendar.cs)
  • Coverage not measured — test suite did not build
  • DbSetExtensions.AddOrUpdate (cognitive 25) (Masuit.Tools.AspNetCore/AspNetCore/DbSetExtensions.cs)
  • DbSetExtensions.AddOrUpdate (cognitive 36) (Masuit.Tools.AspNetCore/AspNetCore/DbSetExtensions.cs)
  • Documentation: no contributor guidance (README.md)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (10 lines × 2) (Masuit.Tools.Abstractions/Security/Encrypt.cs)
  • Duplicated block (10 lines × 3) (Masuit.Tools.Abstractions/Security/Encrypt.cs)
  • Duplicated block (10 lines × 6) (Masuit.Tools.Excel/ExcelExtension.cs)
  • Duplicated block (10–13 lines × 2) (Masuit.Tools.Abstractions/Extensions/BaseType/IDictionaryExtensions.cs)
  • Duplicated block (10–13 lines × 2) (Masuit.Tools.Abstractions/Extensions/BaseType/IDictionaryExtensions.cs)
  • Duplicated block (11 lines × 2) (Masuit.Tools.Abstractions/Strings/NumberFormater.cs)
  • Duplicated block (11 lines × 2) (Masuit.Tools.Core/Models/IQueryableExt.cs)
  • Duplicated block (11 lines × 2) (Masuit.Tools.Excel/ExcelExtension.cs)
  • Duplicated block (11 lines × 2) (Masuit.Tools.Excel/ExcelExtension.cs)
  • Duplicated block (12 lines × 2) (Masuit.Tools.Abstractions/Maths/CoordinateConvert.cs)
  • …and 130 more

Changes since last survey

  • 16 commits — 16 feature/other, 0 fixes

By area

  • Masuit.Tools.Abstractions/Media — 6 commits
  • (root) — 5 commits
  • Masuit.Tools.Abstractions/Files — 1 commit
  • Masuit.Tools.Abstractions/TextDiff — 1 commit
  • Masuit.Tools.Excel/ExcelExtension.cs — 1 commit
  • NetCoreTest/Program.cs — 1 commit
  • Test/Masuit.Tools.Abstractions.Test — 1 commit

Notable commits

  • change: *
  • change: *
  • change: *
  • change: -
  • change: -
  • change: 1. 修正ChineseCalendar计算干支日不正确的bug 2. 重构 ImageBorderRemover.cs,增强参数校验与异常处理,提升多层边框检测准确性,支持浅色背景自动识别,优化性能与颜色比较,移除灰度化处理,结构更清晰。 3. 增强HtmlDiff,新增 maxUnchangedLength 参数与辅助方法,优化 diff 合并逻辑,保持兼容性。
  • change: doc
  • change: 为 ObjectExtensions 添加 ToDictionary 扩展方法
  • change: 优化实体变更信息获取及集合属性比较方式
  • change: 升级包
  • change: 增强HtmlDiffMerge方法,支持maxUnchangedLength参数
  • change: 增强与重构图片格式检测器及测试用例
  • change: 引入可配置参数并增强边框检测与裁剪
  • change: 新增 ToExcel 扩展方法支持导出多表到 Excel
  • change: 新增基于感知质量的JPEG压缩工具类
  • change: 简化 ImageBorderRemover 边框检测逻辑及参数

API surface

  • Unchanged — 1 HTTP endpoints

Architecture

  • Unchanged — 2 containers · 1 contexts · 0 edges

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

ldqk/Masuit.Tools was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 23 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 865adc3963b4de67f96e26673427301fd35c7b12 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-955b9cee9818.