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
- Set Version in the manifest to a valid 2-4 component numeric string (e.g. '1.0.0.0').
- Remove pre-release suffixes or move them to a separate field if the schema supports it.
- 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
- Use strict numeric semver-like versions in manifests (major.minor.build.revision).
- Run VerifyManifest in CI for every extension/theme build.
- Avoid pre-release suffixes in the Version field if the schema does not support them.
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
- No addon manifest installer url.
- LOC.GeneralExtensionPackageError
- Uknown installer manifest url format {InstallerManifestUrl}.
- Extenstion/theme manifest not found.
- Package content invalid.
AI-assisted analysis of JosefNemec/Playnite@5911f4e964 (2026-08-13).
Data as JSON: /api/errors/cd59b0972dd7db65.
Report an issue: GitHub.