stride3d/stride · error · ArgumentException

Build manifest [ ] doesn't exist

Error message

Build manifest [{0}] doesn't exist

What it means

ValidateOptions throws this ArgumentException when a .sdbuild build manifest was supplied via PackageManifestFile but File.Exists reports the file is not present at that path. The tool treats a nonexistent explicit manifest as a configuration error rather than silently building nothing. The message is formatted with the actual path for diagnosis.

Solutions

  1. Verify the manifest path is correct and the file exists (ls / File.Exists) before running the tool
  2. Use an absolute path for --package-manifest-file instead of a relative one
  3. Run the tool from the directory where the relative path is valid
  4. Check CI/container setup ensures the manifest is present at the expected location

Example fix

// before
--package-manifest-file=./Build/manifest.sdbuild
// after
--package-manifest-file=$(pwd)/Build/manifest.sdbuild
Defensive patterns

Strategy: validation

Validate before calling

if (!string.IsNullOrWhiteSpace(manifestPath) && !File.Exists(Path.GetFullPath(manifestPath)))
    throw new FileNotFoundException("Build manifest not found", Path.GetFullPath(manifestPath));

Try / catch

try { RunBuilder(options); } catch (ArgumentException ex) when (ex.ParamName == "packageManifestFile") { Console.Error.WriteLine($"Manifest missing: {options.PackageManifestFile}"); return 1; }

Prevention

When it happens

Trigger: Invoking the builder with --package-manifest-file (or setting PackageManifestFile) pointing to a path that does not exist: typo'd filename, wrong working directory, relative path resolved from an unexpected location, or the manifest was deleted/moved before the run.

Common situations: Running the build tool from a different CWD than intended so relative manifest paths break; CI checkout producing a different directory layout; manifest not copied into a container image; case-sensitivity mismatches on Linux.

Understand the failure class

Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.

Related errors


AI-assisted analysis of stride3d/stride@96fad776d2 (2026-09-14). Data as JSON: /api/errors/2441a679e18297a1. Report an issue: GitHub.

Appendix: source

Thrown at sources/assets/Stride.AssetCompiler/PackageBuilderOptions.cs:97

        {
            if (string.IsNullOrWhiteSpace(BuildDirectory))
                throw new ArgumentException("This tool requires a build path.", "build-path");

            try
            {
                BuildDirectory = Path.GetFullPath(BuildDirectory);
            }
            catch (Exception)
            {
                throw new ArgumentException("The provided path is not a valid path name.", "build-path");
            }

            if (SlavePipe == null)
            {
                if (!string.IsNullOrWhiteSpace(PackageManifestFile))
                {
                    if (!File.Exists(PackageManifestFile))
                        throw new ArgumentException("Build manifest [{0}] doesn't exist".ToFormat(PackageManifestFile), "packageManifestFile");
                }
                else if (string.IsNullOrWhiteSpace(PackageFile))
                {
                    if (string.IsNullOrWhiteSpace(SolutionFile) || PackageId == Guid.Empty)
                    {
                        throw new ArgumentException("This tool requires an input file (package, project, or .sdbuild manifest), or a --solution-file and --package-id.", "inputPackageFile");
                    }
                }
                else if (!File.Exists(PackageFile))
                {
                    throw new ArgumentException("Package file [{0}] doesn't exist".ToFormat(PackageFile), "inputPackageFile");
                }
            }
        }
    }
}

View on GitHub (pinned to 96fad776d2)