Perfare/Il2CppDumper · error · NotSupportedException

ERROR: Metadata file supplied is not a supported version

Error message

ERROR: Metadata file supplied is not a supported version[{version}].

What it means

Thrown as NotSupportedException when the metadata version is sane (0-1000) but outside the supported range 16-31. Il2CppDumper only implements metadata layouts for il2cpp versions 16 through 31 (roughly Unity 5.5 through recent 2021+).

Solutions

  1. Check the metadata version (integer at file offset 4) and update Il2CppDumper to the latest release for new Unity versions.
  2. For version <16, use an older Il2CppDumper release or legacy forks that support old il2cpp layouts.
  3. Do not hand-edit the version field; the layout will not match and parsing will fail later.
  4. Determine the Unity version from the game (e.g. unity default resources or globalgamemanagers) and pick a matching tool.
Defensive patterns

Strategy: validation

Validate before calling

int version = BitConverter.ToInt32(File.ReadAllBytes(metadataPath), 4);
bool supported = version is >= 16 and <= 31;

Try / catch

try { var md = new Metadata(stream); }
catch (NotSupportedException ex) when (ex.Message.Contains("not a supported version")) { /* update dumper or use legacy tool */ }

Prevention

When it happens

Trigger: Calling new Metadata(stream) with a global-metadata.dat whose version field is <16 or >31 — very old Unity builds (version 15 and below) or very new Unity/il2cpp versions not yet supported by this dumper build.

Common situations: Dumping a game built on a newer Unity than the dumper supports, or an extremely old (pre-2017) il2cpp build; also modified metadata where the version field was tampered with.

Related errors


AI-assisted analysis of Perfare/Il2CppDumper@4741d46ba9 (2026-09-11). Data as JSON: /api/errors/1e0169bc5f1d5779. Report an issue: GitHub.

Appendix: source

Thrown at Il2CppDumper/Il2Cpp/Metadata.cs:57

        public Il2CppRGCTXDefinition[] rgctxEntries;

        private readonly Dictionary<uint, string> stringCache = new();

        public Metadata(Stream stream) : base(stream)
        {
            var sanity = ReadUInt32();
            if (sanity != 0xFAB11BAF)
            {
                throw new InvalidDataException("ERROR: Metadata file supplied is not valid metadata file.");
            }
            var version = ReadInt32();
            if (version < 0 || version > 1000)
            {
                throw new InvalidDataException("ERROR: Metadata file supplied is not valid metadata file.");
            }
            if (version < 16 || version > 31)
            {
                throw new NotSupportedException($"ERROR: Metadata file supplied is not a supported version[{version}].");
            }
            Version = version;
            header = ReadClass<Il2CppGlobalMetadataHeader>(0);
            if (version == 24)
            {
                if (header.stringLiteralOffset == 264)
                {
                    Version = 24.2;
                    header = ReadClass<Il2CppGlobalMetadataHeader>(0);
                }
                else
                {
                    imageDefs = ReadMetadataClassArray<Il2CppImageDefinition>(header.imagesOffset, header.imagesSize);
                    if (imageDefs.Any(x => x.token != 1))
                    {
                        Version = 24.1;
                    }
                }

View on GitHub (pinned to 4741d46ba9)