Thank you for considering contributing to VideoGameFileSystemParser! This page covers the repository layout, how to build, test, and submit changes.
CSharp_VideoGameFileSystemParser/
├── VideoGameFileSystemParser/ # The library project
│ ├── Interfaces/ # IConsoleParser contract
│ ├── Models/ # ConsoleType, FileEntry, FsNode, TrackInfo,
│ │ # ConsoleTypeRegistry, ...
│ └── Parsers/
│ ├── ChdContainer.cs # High-level facade
│ ├── SectorReader.cs # Sector pipeline (caching, descrambling)
│ ├── ParserFactory.cs # ConsoleType → parser dispatch
│ ├── Iso9660Parser.cs, UdfParser.cs, XdvdfsParser.cs,
│ ├── HfsParser.cs, ThreeDoParser.cs, CDiFsParser.cs, ...
│ └── Systems/ # Console-specific wrappers
├── docs/ # This wiki (multi-page documentation)
├── Directory.Build.props # Shared build settings + target frameworks
├── README.md # Landing page (mirrors docs/Home.md)
├── WhatsNew.md # Release history (ships in the NuGet package)
└── CSharp_VideoGameFileSystemParser.sln
- .NET SDK 8.0 or newer (the library multi-targets
net8.0;net9.0;net10.0). - Any IDE (Visual Studio, Rider, VS Code) or the CLI.
# Build Debug
dotnet build CSharp_VideoGameFileSystemParser.sln
# Build Release (all target frameworks)
dotnet build VideoGameFileSystemParser/VideoGameFileSystemParser.csproj -c Release
# Create the NuGet package
dotnet pack VideoGameFileSystemParser/VideoGameFileSystemParser.csproj -c Release -o bin/ReleaseThe build produces VideoGameFileSystemParser.<version>.nupkg and .snupkg.
The library's automated test suite lives in the companion repository — CHDMounter, the Windows application where this library is battle-tested in production:
- Unit tests:
CHDMounter.Core.Tests— parser tests (including 18 per-console integration tests such asAmigaCdIntegrationTests),ConsoleTypeRegistrytests,FileNameMatchertests, and more. - Integration: mounting real CHDs as virtual drives exercises every parser and virtual export mode end-to-end.
When contributing, use CHDMounter and its tests to validate your changes against real images. Manual verification checklist for changes:
- Build succeeds for all three target frameworks with no new warnings.
MountAndParsestill returnstruefor representative images of the affected console(s).- Virtual export modes produce byte-correct CUE/BIN/WAV (verify with a CUE parser or an emulator).
- Package validation passes (
EnablePackageValidationis on — it runs API-compat checks during pack).
vareverywhere — the codebase standardizes on implicit typing (see the v1.2.0 code-modernization pass).- XML doc comments on all public members;
CS1591is suppressed but documentation is expected for new public API. - File-scoped namespaces, modern C# (latest language version).
- Never break the public API silently — adding members is fine; renaming/removing requires a major/minor version bump and a Migration Guide entry.
- Keep
ConsoleTypeRegistryas the single source of truth when adding a new console type: add theConsoleTypemember, aConsoleTypeInfoentry with aliases, and aParserFactorymapping.
- Add the
ConsoleTypeenum member inModels/ConsoleType.cs(with doc comment). - Add a
ConsoleTypeInfoentry (display name + CLI aliases) inConsoleTypeRegistry. - Implement
IConsoleParser(or reuse an existing parser with a wrapper) and register it inParserFactory.CreateParser. - Document the console in
docs/Supported-Consoles.md(reference table + parsing logic). - Update
README.mdandWhatsNew.mdrelease notes.
The wiki lives in docs/ and is the source of truth for user documentation:
- Multi-page structure — one topic per page (
Home,Getting-Started,Usage-Guide,Supported-Consoles,Virtual-Exports,API-Reference,Architecture,Migration-Guide,FAQ,Contributing). - API signatures must match the code — when the public API changes, update
docs/API-Reference.mdin the same commit. - Keep cross-page links relative (they work both in the repo and on GitHub).
- Fork the repository and create a feature branch.
- Make focused commits with descriptive messages.
- Update docs (README, docs/wiki, WhatsNew.md) alongside code changes.
- Open a pull request describing the change, motivation, and verification performed.
- Bump
<Version>,<AssemblyVersion>,<FileVersion>inVideoGameFileSystemParser.csproj. - Update
PackageReleaseNotes,README.mdbadge/release notes, and add aWhatsNew.mdentry. dotnet pack -c Releaseand validate the nupkg contents.- Push the tag, publish to nuget.org, and update the GitHub release.
Previous: FAQ · Back to Home