Skip to content

Read the installed game version from KSA.dll's version resource #38

Description

@Maximilian-Nesslauer

Borea needs to read which game build is installed.

RFC 0017 gives an ordered chain: KSA.dll PE FileVersion, then PE ProductVersion, then the build field of the newest Content/Versions/*.json. This issue covers the first two; the Content/Versions fallback is a follow-up.

  • IInstalledGameVersionProvider in Borea.Core/Game, implemented in Borea.Storage/Game, following the ILatestVersionPing and IGamePathProvider precedent of interface in Core, I/O outside it.
  • Take the directory from IGamePathProvider.GetGameDirectoryPath(), which is nullable. Read FileVersionInfo, try FileVersion then ProductVersion. GameVersion.TryParse already accepts a leading v, a -suffix and a +hash, so ProductVersion parses unchanged.
  • Return the parsed GameVersion? next to the raw string, mirroring LatestVersionInfo. RFC 0017 says an unparseable version "becomes Unknown rather than being discarded", so the string stays displayable.
  • Three failure modes: the game path is null, KSA.dll is missing (GetVersionInfo throws), and the file has no version resource (FileVersion comes back null).
  • Tests in Borea.Storage.Tests, where TestGamePathProvider already roots a temp game folder per test: path null, KSA.dll missing, present but unparseable, present and valid.

For the valid case add a tiny fixture class library under tests/Borea.Storage.Tests/Fixtures/ with <FileVersion>2026.8.3.5117</FileVersion> and copy its output in as KSA.dll.

Do not build a read seam around FileVersionInfo.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:coreBorea.Core, the domain modelarea:storageBorea.Storage, persistence and TOMLgood first issueGood for newcomers

    Type

    No type

    Projects

    Status
    Backlog

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions