EllanJiang/GameFramework · critical · GameFrameworkException

Package version list

Error message

Package version list '{0}' is invalid, error message is '{1}'.

What it means

Thrown in OnLoadPackageVersionListFailure when the LoadBytes call for the package version list file completes with a failure callback. The message includes the file URI that failed and the underlying error message (or '<Empty>' if none). This indicates the version list file itself could not be read, not that its contents were invalid.

Solutions

  1. Verify the version list file exists at the read-only path with the exact expected file name (PackageVersionList binary) in the build output.
  2. Check the errorMessage in the exception (or '<Empty>') and inspect the ResourceHelper implementation's load logic for the real cause.
  3. On Android, ensure the helper reads via UnityWebRequest for streamingAssets and that storage permissions are granted.
  4. Re-run the resource build pipeline so the version list is regenerated and included.

Example fix

// before
// version list never built into StreamingAssets
// after
// build step: GameFramework ResourceBuilder -> output to Assets/StreamingAssets/GameFramework with version list enabled
Defensive patterns

Strategy: try-catch

Validate before calling

var path = Path.Combine(resourceComponent.ReadOnlyPath, "PackageVersionList.dat");
bool exists = File.Exists(path) || File.Exists(Path.Combine(Application.streamingAssetsPath, "GameFramework/PackageVersionList.dat"));

Try / catch

try { resourceComponent.InitResources(); }
catch (GameFrameworkException ex) { Log.Fatal("Version list load failed: {0}", ex.Message); /* re-deploy resources */ }

Prevention

When it happens

Trigger: ResourceManager.InitResources invokes m_ResourceHelper.LoadBytes on ReadOnlyPath + RemoteVersionListFileName and the resource helper's failure callback fires: file missing, unreadable, or helper-level load error.

Common situations: Package version list file not copied into StreamingAssets before the build; file name mismatch (default RemoteVersionListFileName vs custom name); storage permission missing on Android so read-only path is inaccessible; the file was overwritten by an empty placeholder.

Understand the failure class

Background: "failed to read file", EACCES, ENOENT and "could not read <path>" errors: when a program can't read a file from disk — this error's family across 49 libraries.

Related errors


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

Appendix: source

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

                        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)