-
Notifications
You must be signed in to change notification settings - Fork 4
02 projects and solution
drpetersonfernandes edited this page Aug 6, 2026
·
1 revision
The solution
SimpleLauncher.slnand the two documented projects in depth. Related: 01 — Overview · 04 — Architecture
| Project | Kind | Role |
|---|---|---|
SimpleLauncher |
WPF app (WinExe) | The launcher — UI, ViewModels, services, launch handlers, scanners, DI composition root |
SimpleLauncher.Core |
Class library | Shared logic — services, models, interfaces, persistence, emulator config injection |
SimpleLauncher.Tests |
xUnit test project | 150 test files; references SimpleLauncher (and transitively Core) |
SimpleLauncher.Updater |
Console app | Self-update helper (Updater.exe) — downloads release zip, swaps files, relaunches app |
SimpleLauncher.Avalonia |
Avalonia UI app | In-progress cross-platform port (secondary/experimental) |
SimpleLauncher.ResourceTranslator |
Tool | Assists translating resources\strings.*.xaml files |
Tools\Mame.DatCreator |
WPF tool | Builds mame.dat (MessagePack) from MAME -listxml + software lists |
Tools\RetroAchievements.DataFetcher |
CLI tool | Fetches the RA game database into RetroAchievements.dat
|
Tools\XmlToBinaryConverter |
WPF tool | Converts history.xml ↔ history.dat (MessagePack) |
Dependency edges: SimpleLauncher → SimpleLauncher.Core; SimpleLauncher.Tests → SimpleLauncher; SimpleLauncher.Updater standalone; SimpleLauncher.Avalonia references Core (via InternalsVisibleTo).
Key properties:
<TargetFramework>net10.0-windows</TargetFramework>
<OutputType>WinExe</OutputType>
<UseWPF>true</UseWPF>
<LangVersion>14</LangVersion>
<Nullable>enable</Nullable>
<RuntimeIdentifiers>win-x64;win-arm64</RuntimeIdentifiers>
<ApplicationManifest>app.manifest</ApplicationManifest>
<StartupObject>SimpleLauncher.App</StartupObject>
<AssemblyVersion>/<FileVersion>/<Version>5.6.0</Version>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<RuntimeFrameworkVersion>10.0.2</RuntimeFrameworkVersion>
<SupportedOSPlatformVersion>7.0</SupportedOSPlatformVersion>-
Versioning:
5.6.0; kept consistent with Core, tests,app.manifest, andSimpleLauncher.Updater\version.txt(VersionConsistencyTestsenforces it). -
InternalsVisibleTo("SimpleLauncher.Tests")— tests reach internal members. -
Copy-to-output payloads (
<None Update=... CopyToOutputDirectory>):-
appsettings.json(Always),WhatsNew.md(PreserveNewest),mame.dat(Always), system imagesimages\systems\*.png(Always),audio\*.mp3. -
tools\*payloads:findromcover\,createbatchfilesforscummvmgames\,createbatchfilesforwindowsgames\,BatchConvertTo7z\,CreateBatchFilesForPS3Games\(stale entries forps3batchlaunchercreator\remain in the csproj but have no folder on disk — see 11 — Bundled Tools), plus 7za binaries, system images, and more.
-
-
Global usings:
System.IO,System.Net.Http,Serilog. -
NoWarn: NU1903;CS0436. - Startup object is
SimpleLauncher.App(see 04 — Architecture).
| Package | Version | Used for |
|---|---|---|
| MahApps.Metro | 2.4.11 | UI theme/controls |
| CommunityToolkit.Mvvm | 8.4.2 | ViewModels (ObservableObject, RelayCommand) |
| MessagePack | 3.1.8 | Binary data files |
| Microsoft.Extensions.* | 10.0.10 | Configuration, DI, HTTP, resilience |
| Microsoft.Extensions.Http.Resilience | 10.8.0 | Polly retry policy on downloads |
| Microsoft.Data.Sqlite / SourceGear.sqlite3 | 10.0.10 / 3.53.4 | SQLite (Amazon scan, Stella settings) |
| SharpCompress | 0.50.4 | Archive extraction |
| NAudio | 2.3.0 | UI sound effects |
| SharpDX + XInput + DirectInput | 4.2.0 | Gamepad input |
| InputSimulatorCore | 1.0.5 | Mouse simulation from gamepad |
| Serilog (+ Sinks.Async/Debug/File) | 4.4.0 | Logging |
| Tomlyn | 2.10.1 | TOML parsing (Xenia, Yumir configs) |
| YamlDotNet | 18.1.0 | YAML parsing (RPCS3 config) |
| Meziantou.Analyzer | 3.0.139 | Static analysis (PrivateAssets) |
| Microsoft.CodeAnalysis.NetAnalyzers | 10.0.302 | Static analysis |
Key properties: net10.0-windows, IsPackable=true, Nullable enabled, LangVersion 14, DebugType=embedded, version 5.6.0.
-
InternalsVisibleTo:SimpleLauncher.Tests,SimpleLauncher,SimpleLauncher.New,SimpleLauncher.Avalonia,SimpleLauncher.New.Tests. -
Global usings:
System.IO,System.Net.Http,Serilog— so every Core service takes a SerilogILoggerby convention. - Packages: the same core set as the app (CommunityToolkit.Mvvm, MessagePack, Microsoft.Extensions., SharpCompress, NAudio, SharpDX, Serilog, Tomlyn, YamlDotNet, SourceGear.sqlite3, Meziantou.Analyzer) — no WPF/MahApps (it targets
net10.0-windowsbecause of DPAPIProtectedData,System.Drawing-adjacent helpers, and Windows-specific services, but stays UI-agnostic).
SimpleLauncher/
├── App.xaml(.cs) DI composition root, startup sequence
├── MainWindow.xaml(.cs) + 12 partials (hosts, menus, pagination, search, close events…)
├── *.xaml(.cs) 22 root windows (About, Debug, EasyMode, EditSystem, InjectConfig…)
├── InjectConfigWindows/ 21 emulator config-injection dialogs
├── Pages/ Favorites, GlobalSearch, PlayHistory
├── ViewModels/ 44 ViewModels (incl. 21 Inject*ConfigViewModel)
├── Services/ UI services, launch handlers, scanners, RA, favorites, play history…
├── Interfaces/ host & service interfaces (29)
├── Models/ app-side models (SearchResult, WindowScreenshot, RaAchievement…)
├── resources/ strings.{lang}.xaml (18 languages)
├── resources2/ theme overrides (HighContrast, Midnight)
├── tools/ bundled executables (see 11)
├── samples/ emulator config templates (samples\{Emulator}\*)
├── audio/ images/ icon/ shipped assets
└── appsettings.json, app.manifest, mame.dat, parameters.md, WhatsNew.md
SimpleLauncher.Core/
├── Services/ ~30 areas (see 07 — Core Services)
├── Models/ data models (Ra*, History, emulator settings, converters…)
├── Interfaces/ service contracts
└── (no UI, no XAML)
- Home
- 01 Overview
- 02 Projects And Solution
- 03 Quickstart
- 04 Architecture
- 05 Configuration
- 06 Systems And Launch
- 07 Core Services
- 08 Ui Layer
- 09 Retroachievements
- 10 Game Scanning
- 11 Bundled Tools
- 12 Data Formats
- 13 Logging And Debug
- 14 Testing
- 15 Development
- 16 Updater
- 17 Release Notes
- 18 Emulator Parameters
- Manual Tests
- Parameters