vbfox/FoxSharp
61.9
Weak · 3 October 2026
2.1k
lines of production code
F#
with C#
2
measurements over time
What this system is
This system is a collection of F\# utility libraries and build automation tools designed to support .NET development workflows. It provides specialized functionality for command-line argument parsing across Windows and Unix platforms, detection of Visual Studio installations, and parsing of Java properties files. Additionally, it includes a build task framework for FAKE and a caching layer for F\# reflection to improve performance.
Features
Added Unix command-line parsing support for Mono and .NET Core
The library now includes specific argument parsing implementations for Unix environments, introducing \MonoUnixCommandLine\ for Mono and \DotnetCoreUnix\ for .NET Core. These parsers replicate the argument splitting behavior of their respective native runtimes (Mono's \gshell.c\ and .NET Core's \Process.Unix.cs\), ensuring that quotes, escapes, and special characters are handled consistently with the underlying platform. This allows the library to correctly parse and generate command lines on Unix systems regardless of whether the application is running on Mono or .NET Core.
src/BlackFox.CommandLine · high confidence
Introduce BlackFox.VsWhere for detecting Visual Studio installations
Added the BlackFox.VsWhere library, an F\#-based tool for locating Visual Studio 2017+ instances and legacy versions (VS .NET 2002–2015). The library exposes functions to enumerate all instances, filter for completed installations, search by specific package IDs, and detect legacy registry-based installs, while handling COM API nulls and errors gracefully.
src/BlackFox.VsWhere · high confidence
Introduce Cached F\# Reflection library
Adds the BlackFox.CachedFSharpReflection library, which caches results of F\# reflection API calls (such as type checks and field/constructor precomputations) to improve performance. The library provides FSharpTypeCache and FSharpValueCache classes with a shared singleton instance, and includes a combined FSharpReflectionCache container for passing both caches together. It also documents that caches retain type references and advises against using the shared instance in collectible AssemblyLoadContext scenarios.
src/BlackFox.CachedFSharpReflection · high confidence
Introduce F\# type definitions for Visual Studio setup instances
Added the \Types.fs\ module in the \BlackFox.VsWhere\ library, defining core F\# record types (\VsSetupInstance\, \VsSetupPackage\, \VsSetupErrorState\, etc.) that model the data structure returned by the Visual Studio Installer. These types provide a strongly-typed interface for consuming Visual Studio installation metadata, such as instance IDs, paths, package lists, and error states, within the F\# codebase.
BlackFox.VsWhere · high confidence
Introduction of a generic concurrent dictionary cache
Added a new internal caching mechanism (DictCache) that wraps a ConcurrentDictionary to provide thread-safe, lazy initialization of reflection data. This component allows the library to store computed values keyed by a converted dictionary key, automatically computing and caching the value on first access and providing a method to clear the cache.
BlackFox.CachedFSharpReflection · high confidence
New BuildTask module with task definition and execution helpers
Introduces the BlackFox.Fake.BuildTask module, providing a Gulp-like syntax for defining FAKE build tasks via the TaskBuilder and create functions, supporting soft and hard dependencies. It adds execution helpers including runOrDefault, runOrDefaultWithArguments, runOrList, listAvailable, and printDependencyGraph for managing target runs, along with setupContextFromArgv to parse command-line arguments into the FAKE context. Additionally, it provides runOrDefaultApp and runOrListApp variants that wrap execution in error handling, returning exit codes and printing exceptions to the console.
BlackFox.Fake.BuildTask · high confidence
New Java .properties file parser library
Added the BlackFox.JavaPropertiesFile library, providing functions to parse Java-style .properties files into a list of comments and key-value entries, with utilities to convert these entries into maps or dictionaries. The parser adheres to the java.util.Properties.load specification, defaulting to ISO-8859-1 encoding for file reads while supporting custom encodings via TextReader, and correctly handles escape sequences, line continuations, and whitespace separators.
src/BlackFox.JavaPropertiesFile · high confidence
New VsWhereCmd utility to list Visual Studio instances
A new command-line utility (src/BlackFox.VsWhereCmd/Main.fs) has been added that iterates over all Visual Studio instances (including legacy ones) and prints their display name, installation version, and installation path to the console.
src/BlackFox.VsWhereCmd · high confidence
New build automation tasks for FoxSharp projects
The build system now includes a new Tasks.fs module that defines a comprehensive set of build targets (Init, Clean, Build, Test, NuGet, Publish, Zip, Release, CI, and Default). This module automates the building, testing, and packaging of multiple BlackFox projects (Fake.BuildTask, VsWhere, JavaPropertiesFile, CommandLine, PathEnvironment, CachedFSharpReflection) and their associated tests. It handles version generation, cross-platform test execution (including net461 on Windows and netcoreapp/net10 on Linux), test result reporting to build servers, and artifact creation (NuGet packages and zipped binaries).
BlackFox.FoxSharp.Build · high confidence
New command-line argument parsing and escaping library
The BlackFox.CommandLine package introduces a new F\# library for constructing and parsing command-line arguments across different platforms. It provides a fluent API for building command lines with support for conditional arguments, prefixes, and printf-style formatting. The library includes platform-specific escaping and parsing modules: MsvcrCommandLine for Microsoft C Runtime behavior (including settings for always quoting and double-quote escaping) and MonoUnixCommandLine for Mono/Unix-style escaping. This allows applications to correctly format and parse arguments according to the conventions of the target runtime environment.
BlackFox.CommandLine · high confidence
Repository initialization and build infrastructure setup
The repository has been initialized with a complete build infrastructure, including a solution file (FoxSharp.sln) that organizes multiple F\# and C\# projects such as BlackFox.CommandLine, BlackFox.Fake.BuildTask, and BlackFox.CachedFSharpReflection. Build scripts (build.sh, build.cmd) and Paket tooling (paket.sh, paket.cmd) have been added to manage dependencies and execute builds using the .NET SDK (configured for version 10.0.100 with latestMajor rollforward in global.json). Standard repository configuration files like .editorconfig, .gitattributes, .gitignore, LICENSE.md, and Readme.md are also present to define coding standards, licensing, and documentation.
(repo-wide) · high confidence
Behavioural changes
Introduce GitHub Actions support in the build script
The build script (Program.fs) now explicitly installs the GitHub Actions build server integration, enabling CI pipelines on GitHub Actions to correctly identify the environment. This change is supported by the addition of the Fake.BuildServer.GitHubActions dependency in paket.references.
src/BlackFox.FoxSharp.Build · high confidence
PathEnvironment: Corrected Windows executable resolution and robustness fixes
The PathEnvironment module now accurately resolves executables on Windows by falling back to the standard cmd.exe PATHEXT list (.COM;.EXE;.BAT;.CMD;.VBS;.JS;.WS;.MSC) when the environment variable is missing, and by correctly handling names that already include an executable extension (e.g., 'node.exe') without appending duplicate extensions. Additionally, parsing of PATH and PATHEXT is more robust: empty entries caused by leading, trailing, or doubled separators are now ignored, and null environment variables no longer cause crashes. The current directory is also correctly excluded from searches when includeCurrentDirectory is false.
src/BlackFox.PathEnvironment · high confidence
Test coverage
Added test suite for FoxSharp core libraries
Added a new test project (src/BlackFox.FoxSharp.Tests) covering the FoxSharp library components. The tests verify FSharpTypeCache and FSharpValueCache behavior (including caching, concurrency, and handling of types with identical FullNames from different assemblies), command-line parsing and escaping for MSVCR, Mono, and .NET Core, Java properties file parsing (including whitespace, escaping, and multi-line support), and PathEnvironment utilities (PATH/PATHEXT handling, executable finding, and edge cases like trailing separators).
src/BlackFox.FoxSharp.Tests · high confidence
Dependencies
Initial project structure and dependency configuration
This change introduces the foundational build infrastructure for the FoxSharp repository, establishing a multi-project solution managed by Paket. It defines the dependency graph in paket.dependencies and paket.lock, pinning FSharp.Core to version 10.1.302 and integrating the FAKE 5 build automation suite (including targets, process, and Git tools) for the build project. The diff also creates the initial project files for several libraries, including BlackFox.CommandLine, BlackFox.Fake.BuildTask, BlackFox.JavaPropertiesFile, BlackFox.PathEnvironment, and BlackFox.VsWhere, configuring them for .NET Standard 2.0 and .NET Framework 4.5/4.6 support, alongside a test project and a VsWhere command-line utility targeting .NET 10.0.
(dependencies) · high confidence
Housekeeping
Documentation and release notes added for BlackFox.Fake.BuildTask
This change introduces the primary documentation for the BlackFox.Fake.BuildTask library, including a new README.md file that provides usage examples and a complete API reference for the strongly typed Target alternative for FAKE. It also adds a Release Notes.md file detailing the history from version 0.1.0 to 0.1.3, highlighting features such as the addition of \runOrDefaultApp\ and \runOrListApp\ for better CLI integration, and the signature change of \setupContextFromArgv\ to accept an array.
src/BlackFox.Fake.BuildTask · 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 62 → 62 (-0.0)
- Rubric changed (rubric-2026.09.15 → rubric-2026.10.1) — scores are not directly comparable.
Lenses
- Code Health 70 → 70 (+0.0)
- Architecture 97 → 100 (+2.9)
- Maturity 52 → 52 (+0.0)
- Readiness 59 → 59 (+0.0)
- Security 93 → 91 (-1.7)
Resolved (5)
- Documentation: no installation or build instructions (README.md)
- Documentation: no licence statement (README.md)
- Documentation: no project overview (README.md)
- redundant comment (src/BlackFox.CommandLine.TestParsers/DotnetCoreUnix.cs)
- redundant comment (src/BlackFox.CommandLine.TestParsers/DotnetCoreUnix.cs)
Architecture
- Unchanged — 0 containers · 5 contexts · 1 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
vbfox/FoxSharp 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 3 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 8046989bb806564f98660450ff5e61dee5cb62f0 — the exact code this score is about.
- Scored under rubric-2026.10.1 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-4f4226d619ea.