EllanJiang/GameFramework · critical · GameFrameworkException

Parse package version list exception

Error message

Parse package version list exception '{0}'.

What it means

Wraps any non-GameFrameworkException thrown while parsing/deserializing the package version list into a GameFrameworkException with the original exception message appended. It preserves the inner exception as InnerException. Any unexpected parsing error (corrupt stream, out-of-range reads, format bugs) surfaces this way in OnLoadPackageVersionListSuccess's catch block.

Solutions

  1. Inspect the InnerException of this GameFrameworkException to find the real parse failure.
  2. Rebuild and redeploy the version list to eliminate corruption/truncation.
  3. Confirm the downloaded/loaded bytes are the version list binary (log bytes.Length and first bytes) and that the URL/path is correct.
  4. Pin GameFramework and resource-builder versions so the binary layout matches the serializer.

Example fix

// before
catch (GameFrameworkException ex) { Log.Error(ex.Message); } // inner cause lost
// after
catch (GameFrameworkException ex) { Log.Error("{0} | inner: {1}", ex.Message, ex.InnerException); }
Defensive patterns

Strategy: try-catch

Try / catch

try { resourceComponent.InitResources(); }
catch (GameFrameworkException ex) when (ex.InnerException != null)
{ Log.Error("Parse failed: {0} caused by {1}", ex.Message, ex.InnerException); }

Prevention

When it happens

Trigger: PackageVersionListSerializer.Deserialize throws (e.g. end-of-stream while reading, bad binary layout) or the post-deserialization processing code throws any non-GameFrameworkException inside the try block.

Common situations: Version list file truncated during copy to the device; version list built with mismatched binary layout/endianness or different framework version; LoadBytes returned bytes of an HTML error page instead of the binary list when loading a remote URL.

Understand the failure class

Background: "failed to unmarshal" / json.Unmarshal errors: why parsing a response into a Go struct fails and how to fix it — this error's family across 23 libraries.

Related errors


AI-assisted analysis of EllanJiang/GameFramework@d0c010b051 (2026-09-15). Data as JSON: /api/errors/4878ec439e484fc5. Report an issue: GitHub.

Appendix: source

Thrown at GameFramework/Resource/ResourceManager.ResourceIniter.cs:162

                            if (resource.Variant != null && resource.Variant != m_CurrentVariant)
                            {
                                continue;
                            }

                            group.AddResource(new ResourceName(resource.Name, resource.Variant, resource.Extension), resource.Length, resource.Length);
                        }
                    }

                    ResourceInitComplete();
                }
                catch (Exception exception)
                {
                    if (exception is GameFrameworkException)
                    {
                        throw;
                    }

                    throw new GameFrameworkException(Utility.Text.Format("Parse package version list exception '{0}'.", exception), exception);
                }
                finally
                {
                    m_CachedFileSystemNames.Clear();
                    if (memoryStream != null)
                    {
                        memoryStream.Dispose();
                        memoryStream = null;
                    }
                }
            }

            private void OnLoadPackageVersionListFailure(string fileUri, string errorMessage, object userData)
            {
                throw new GameFrameworkException(Utility.Text.Format("Package version list '{0}' is invalid, error message is '{1}'.", fileUri, string.IsNullOrEmpty(errorMessage) ? "<Empty>" : errorMessage));
            }
        }
    }

View on GitHub (pinned to d0c010b051)