-
Notifications
You must be signed in to change notification settings - Fork 0
Contributing
Thanks for your interest in improving SimpleXisoDrive. This page describes how to report problems, propose changes, and submit code.
- Report bugs with console output and log files (see below).
- Suggest features through GitHub issues.
-
Improve documentation in the
docs/folder. - Submit code for fixes, format support, and performance work.
- Test with different ISO variants and report which ones work or fail.
Repository: https://github.com/purelogiccode/SimpleXisoDrive
Include as much of the following as possible:
- Application version (shown in logs; currently 1.5.0).
- Operating system and architecture (Windows x64/ARM64, Linux or macOS).
- Mount backend version: Dokan on Windows, FUSE 3 / macFUSE on Linux and macOS.
- The exact command line used.
- The complete console output.
- The newest
logs/simplexisodrive-*.logfile. -
error.logand, if present,critical_error.log. - The image's size and origin (dump tool, format, and layout/packer, if known).
Never attach copyrighted game data; a description of the failure and log excerpt is enough.
-
Install the .NET 10 SDK.
-
Clone the repository.
-
Build and test:
dotnet build CSharp_SimpleXisoDrive.sln dotnet test CSharp_SimpleXisoDrive.sln
Dokan is only needed to run the application, not to build or test it.
See Building and Testing for details.
The project has a small, explicit style that reviewers expect:
| Area | Convention |
|---|---|
| Namespaces | File-scoped (namespace SimpleXisoDrive;) |
| Nullable | Enabled; annotate nullability accurately |
| Usings | Implicit usings enabled; add explicit usings for non-implicit types |
| Types |
var where the type is apparent |
| Fields |
_camelCase for private instance fields; static readonly for shared state |
| Constants |
PascalCase for constants used across members, UPPER_SNAKE is not used |
| Braces | Allman style; braces even for single statements |
| Comments | Only where they add value; prefer clear names and XML docs |
| Public API | XML documentation comments on classes, constructors, methods, and properties |
| Async | Async methods end in Async; fire-and-forget must be deliberate and documented |
| Exceptions | Catch at boundaries; log with Serilog rather than Console.WriteLine in services |
The .editorconfig disables three analyzer rules (MA0004, MA0051, MA0015); everything else
should build cleanly with the enabled Meziantou and Roslynator analyzers.
- Keep all XDVDFS parsing inside XISOSharp; the application should only map virtual paths to the library's entry APIs and translate its exceptions.
- Keep image stream access serialized: rely on
XisoExplorer's internal lock for path-based mounts and hold the volume's stream lock for embedded images. - Treat offsets and lengths from the image as untrusted input; validate against the stream length.
- Never introduce a write path; the volume is read-only by design.
- Add or update xUnit tests for every behavioral change.
- Follow the naming convention
MethodOrFeature_Scenario_ExpectedResult. - Tests must not require Dokan, network access, admin rights, or a real ISO.
- Restore global state (current directory, temp files) in
finallyblocks.
Run before submitting:
dotnet build CSharp_SimpleXisoDrive.sln -c Release
dotnet test CSharp_SimpleXisoDrive.sln -c ReleaseThe same commands run in GitHub Actions on every push and pull request
(.github/workflows/ci.yml), and the release workflow re-runs the suite before packaging a
release_* tag. See Building.
- The solution builds in Release with no new warnings.
-
dotnet testpasses. - Public API changes have XML documentation.
- New behavior is covered by tests.
- Documentation in
docs/is updated when user-visible behavior changes. - The version is bumped in every
.csprojfile only when preparing a release. - No secrets, personal paths, or unrelated formatting changes are included.
Use clear commit messages that describe the change, for example:
Add XGD2 partition offset probing
Fix directory traversal aborting on empty names
The pages in docs/ are written in Markdown and drive both the GitHub wiki and the published
documentation site. When editing:
- keep links wiki-style (
[Installation](Installation)); the site layout rewrites them to the generated pages at runtime; - update the side menus when adding or renaming a page:
docs/_Sidebar.md(wiki) anddocs/_data/navigation.yml(site); - prefer precise, verifiable statements over marketing language;
- include exact error messages and file paths where relevant.
SimpleXisoDrive is licensed under GPL-3.0. By submitting a contribution, you agree that it is your own work and that it may be distributed under the same license.
Be respectful and constructive. Reports and reviews should focus on the technical content. Harassment or abuse in issues or pull requests will not be tolerated.
User guide
Technical reference
Development
Project