ionide/proj-info
54.7
Adequate · 3 October 2026
4.5k
lines of production code
F#
primary language
2
measurements over time
What this system is
This system is a .NET library and CLI tool designed to parse and analyze MSBuild projects and Visual Studio solutions. It extracts detailed project metadata, including reference assemblies, analyzer paths, and compile items, while supporting complex scenarios like multi-targeting, cross-language references, and legacy SDK structures. The tool provides APIs to map this data to F\# Compiler Service options and manages workspace state for IDE integration.
How it got here
2017–2019 — Repository initialization and test scaffolding
8 changes.
The project was initialized with essential configuration, documentation, and build infrastructure to support development workflows. A comprehensive suite of test examples was added to validate various .NET SDK project structures, including multi-targeting, legacy SDK scenarios, and mixed C\#/F\# workspaces.
2020–2022 — ProjInfo library restructuring and tooling
11 changes.
This period focused on a major restructuring of the Ionide.ProjInfo library, introducing dedicated modules for project system management, FCS mapping, and a new CLI tool. The build infrastructure was migrated from FAKE to a modern .NET project, and comprehensive test coverage was added to validate solution parsing, cross-language references, and various MSBuild scenarios.
2024–2025 — test coverage expansion
8 changes.
This period focused on expanding test coverage by adding new test fixtures and scenarios for various project structures, including reference assemblies, traversal projects, and solution folders. The work also included validating the parsing of .slnx files and testing F\# analyzer support within NuGet packages.
Features
Initial repository scaffolding and configuration
The repository is initialized with essential configuration files to support development and release workflows. This includes an .editorconfig for consistent code formatting (Fantomas integration), .gitattributes and .gitignore for version control hygiene, a CHANGELOG.md following Keep a Changelog standards, and a global.json pinning the SDK to version 8.0.100. Documentation files such as README.md, CONTRIBUTING.md, and CODE\_OF\_CONDUCT.md are added to guide users and contributors, while build scripts (build.sh, build.cmd) and a solution file (ionide-proj-info.sln) structure the project for building and testing.
(repo-wide) · high confidence
Introduce ProjectSystem module for workspace and project management
This change introduces the new \Ionide.ProjInfo.ProjectSystem\ library, which provides a high-level API for managing F\# projects and workspaces. It includes a \ProjectController\ that handles project loading, caching, and change notifications, along with utilities for detecting the F\# compiler and interactive tool locations across different operating systems and Visual Studio installations. The module also adds support for scanning directories for solution and project files, parsing \.sln\ and \.slnf\ files, and normalizing file paths for consistent project analysis.
src/Ionide.ProjInfo.ProjectSystem · high confidence
Introduce proj-info CLI tool for project and solution analysis
A new .NET SDK tool, Ionide.ProjInfo.Tool, is introduced to allow quick parsing of MSBuild projects and solutions. Users can analyze a single project or an entire solution using the --project and --solution flags, respectively. The tool supports switching to the MSBuild graph loader via the --graph flag for improved dependency resolution. Output can be customized: the default is a structured text representation of Ionide project options, but users can request FCS ProjectOptions with --fcs or serialize the results to JSON using --serialize.
src/Ionide.ProjInfo.Tool · high confidence
New helper library for mapping project options to FCS
A new library, Ionide.ProjInfo.FCS, has been added to provide APIs that map Ionide.ProjInfo.Types.ProjectOptions instances to FSharp.Compiler.CodeAnalysis.FSharpProjectOptions instances. This allows users to efficiently convert project options into the format required by the F\# Compiler Service, supporting both F\# projects and cross-language references (C\#/VB) via DLL metadata.
src/Ionide.ProjInfo.FCS · high confidence
Behavioural changes
Build system migrated from FAKE script to .NET project
The build infrastructure has been refactored from a .fsx script to a .NET project (build/Program.fs), enabling the use of modern .NET tooling and dependencies. This change introduces support for testing against .NET 8, 9, and 10, integrates the GitHub Actions logger for better CI visibility, and disables internal MSBuild binlogs to reduce noise. Users will experience a more robust and standardized build process that aligns with current .NET ecosystem practices.
build · high confidence
Ionide.ProjInfo library restructured with new solution parsing and logging
The Ionide.ProjInfo component has been reorganized into a new library structure, introducing a dedicated logging module (FsLibLog.fs) for standardized log levels and context, and replacing the previous solution file parsing logic with the Microsoft.VisualStudio.SolutionPersistence library to support .sln, .slnf, and .snx formats with proper folder hierarchy. The core types (Types.fs) now expose detailed project metadata including reference assemblies, analyzer paths, and compile item metadata, while the main loader (Library.fs) integrates with MSBuild project graphs and legacy framework discovery to provide a unified workspace loading experience for consumers.
src/Ionide.ProjInfo · high confidence
Test coverage
Added C\# .NET SDK library example and documentation; Added C\# library and F\# executable test example; Added F\# sample project for NuGet analyzer testing; Added test case for reference assembly generation; Added test coverage for BeforeBuild and BeforeCompile targets; Added test coverage for sample Android workload verification; Added test example for .NET SDK library; Added test example for .NET SDK sparse workspace with F\# libraries; Added test example for overriding BaseIntermediateOutputPath; Added test examples for .NET SDK project configurations; Added test fixture for .NET SDK solution explorer configuration; Added test fixture for bad cache data handling; Added test fixture for multi-project solution with shared items; Added test fixture for old SDK multi-project references; Added test fixture for solution files with solution items; Added test fixture for solution folders; Added test for missing import handling; Added test for traversal project support; Added test infrastructure and test cases for Ionide.ProjInfo; Added unit test for reading .slnx files.
Dependencies
Centralized dependency management and .NET 8+ target framework support
The project has adopted Central Package Versions (Directory.Packages.props) to manage dependency versions uniformly across all projects, including FSharp.Compiler.Service 43.12.201, FSharp.Core 6.0.0, and Expecto 10.2.3. Additionally, the main libraries and tooling have been updated to target .NET 8.0 (with optional .NET 9 and 10 support), replacing previous framework targets to align with modern .NET SDKs.
(dependencies) · 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 60 → 55 (-5.0)
- Rubric changed (rubric-2026.09.13 → rubric-2026.10.1) — scores are not directly comparable.
Lenses
- Code Health 100 → 95 (-5.3)
- Architecture 63 (new)
- Maturity 54 → 54 (+0.0)
- Readiness 55 → 55 (+0.0)
- Security 66 → 50 (-16.0)
Resolved (4)
- Documentation: no contributor guidance (README.md)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Off-boarding risk: anonymized user #1
New (9)
- Duplicated block (10 lines × 2) (src/Ionide.ProjInfo/FsLibLog.fs)
- Duplicated block (13 lines × 2) (src/Ionide.ProjInfo.ProjectSystem/FscArguments.fs)
- Duplicated block (14–15 lines × 2) (src/Ionide.ProjInfo/Library.fs)
- Duplicated block (7 lines × 2) (src/Ionide.ProjInfo/Library.fs)
- End-of-life runtime: .NET net6.0
- End-of-life runtime: .NET netcoreapp2.1
- FileTooLong: Ionide.ProjInfo/FsLibLog.fs (src/Ionide.ProjInfo/FsLibLog.fs)
- FileTooLong: Ionide.ProjInfo/Library.fs (src/Ionide.ProjInfo/Library.fs)
- Off-boarding risk: anonymized user #1
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
ionide/proj-info 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 b3edb61e60e6e74322c6b858b2558ca0d83bb750 — 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.