EllanJiang/GameFramework · error · GameFrameworkException

Parse read-write version list exception

Error message

Parse read-write version list exception '{0}'.

What it means

Wraps any non-GameFrameworkException raised while parsing the read-write version list into a GameFrameworkException with the original exception's text and instance attached. Existing GameFrameworkExceptions (like the deserialize-failure one) pass through untouched.

Solutions

  1. Read InnerException in the message to find the real cause
  2. Delete the corrupt read-write version list and let the framework rebuild it
  3. Verify the write path completed (fsync/close) before the previous update finished
  4. Wrap resource-check start in try-catch to recover via re-download

Example fix

// before: crash propagates
checker.CheckResources();
// after
try { checker.CheckResources(); }
catch (GameFrameworkException ex) { DeleteReadWriteVersionList(); RetryCheck(); }
Defensive patterns

Strategy: try-catch

Try / catch

try { checker.CheckResources(); }
catch (GameFrameworkException ex) when (ex.Message.StartsWith("Parse read-write version list exception")) {
    Log.Error(ex.InnerException ?? ex);
    DeleteReadWriteVersionList(); RetryCheck();
}

Prevention

When it happens

Trigger: An exception other than GameFrameworkException escapes the try block of OnLoadReadWriteVersionListSuccess — e.g. stream read errors on truncated bytes, or errors in the resource/fileSystem iteration loop.

Common situations: Partially written sandbox version list from a crashed update; deserializer hitting unexpected EOF; I/O exceptions reading from persistent storage; bugs in fileSystem name lookup throwing inside the foreach.

Understand the failure class

Background: JSON parse error: "Unexpected token" / "not valid JSON" / "failed to parse" — what JSON parsers are really complaining about — this error's family across 45 libraries.

Related errors


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

Appendix: source

Thrown at GameFramework/Resource/ResourceManager.ResourceChecker.cs:481

                        }
                    }

                    foreach (LocalVersionList.Resource resource in resources)
                    {
                        SetReadWriteInfo(new ResourceName(resource.Name, resource.Variant, resource.Extension), (LoadType)resource.LoadType, resource.Length, resource.HashCode);
                    }

                    m_ReadWriteVersionListReady = true;
                    RefreshCheckInfoStatus();
                }
                catch (Exception exception)
                {
                    if (exception is GameFrameworkException)
                    {
                        throw;
                    }

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

            private void OnLoadReadWriteVersionListFailure(string fileUri, string errorMessage, object userData)
            {
                if (m_ReadWriteVersionListReady)
                {
                    throw new GameFrameworkException("Read-write version list has been parsed.");
                }

View on GitHub (pinned to d0c010b051)