JosefNemec/Playnite · error · Exception

Extension version string must be a real version!

Error message

Extension version string must be a real version!

What it means

Thrown by BaseExtensionManifest.VerifyManifest when the Version string fails System.Version.TryParse — i.e. it is not a valid .NET version (such as '1.0' or '1.2.3.4'). Manifest verification requires a parseable version to compare compatibility and perform updates.

Source

Thrown at source/Playnite/Manifests/ExtensionManifest.cs:47

        public string Version { get; set; }

        public List<Link> Links { get; set; }

        [YamlIgnore]
        public string DirectoryPath { get; set; }

        [YamlIgnore]
        public string DirectoryName { get; set; }

        [YamlIgnore]
        public string DescriptionPath { get; set; }

        public void VerifyManifest()
        {
            if (!System.Version.TryParse(Version, out var extver))
            {
                throw new Exception("Extension version string must be a real version!");
            }
        }
    }

    public class ExtensionManifest : BaseExtensionManifest
    {
        [YamlIgnore]
        public bool IsExternalDev { get; set; }

        //[YamlIgnore]
        //public bool IsCompatible { get; } = false;

        public string Module { get; set; }

        public string Icon { get; set; }

        public ExtensionType Type { get; set; }

View on GitHub (pinned to 5911f4e964)

Solutions

  1. Set Version in the manifest to a valid 2-4 component numeric string (e.g. '1.0.0.0').
  2. Remove pre-release suffixes or move them to a separate field if the schema supports it.
  3. Run the manifest through VerifyManifest during packaging to catch the error early.

Example fix

// before
if (!System.Version.TryParse(Version, out var extver)) { throw new Exception("Extension version string must be a real version!"); }

// after — clearer message with the bad value
if (!System.Version.TryParse(Version, out var extver)) {
    throw new FormatException($"Manifest Version '{Version}' is not a valid version (expect major.minor[.build[.revision]]).");
}
Defensive patterns

Strategy: validation

Validate before calling

// Validate the version string before installing/packaging.
if (!Version.TryParse(manifest.Version, out _)) {
    throw new FormatException($"Invalid manifest version: {manifest.Version}");
}

Type guard

static bool IsValidManifestVersion(string v) => Version.TryParse(v, out _);

Prevention

When it happens

Trigger: VerifyManifest is called on an ExtensionManifest/ThemeManifest whose Version field holds a non-version string (e.g. 'v1', 'latest', '1.0-beta', or empty). Version.TryParse rejects non-numeric/non-standard tokens.

Common situations: Extension/theme author typed an arbitrary version tag in the manifest yaml; a pre-release suffix breaks strict Version parsing; manifest hand-edited with an invalid value.

Related errors


AI-assisted analysis of JosefNemec/Playnite@5911f4e964 (2026-08-13). Data as JSON: /api/errors/cd59b0972dd7db65. Report an issue: GitHub.