-
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.2.0).
- Windows version and architecture (x64/ARM64).
- Dokan version installed.
- The exact command line used.
- The complete console output.
- The newest
logs\simplexisodrive-*.logfile. -
error.logand, if present,critical_error.log. - The ISO's size and origin (dump tool and layout, 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 ISO stream access inside
IsoStso it stays serialized by the stream lock. - Preserve cycle detection and iteration limits in
VfsContainertraversals. - 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 Release- 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 both
.csprojfiles 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 mirror the GitHub wiki. When editing:
- keep links relative (
[Installation](Installation)); - update
_Sidebar.mdwhen adding a page; - 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