stride3d/stride · error · ArgumentException

There is currently no link between elements

Error message

There is currently no link between elements '{0}' and '{1}'

What it means

Internal lookup guard in AssetDependencies.GetLink: a link lookup (in, out, or broken-out) was requested for an AssetId that has no recorded AssetLink in the corresponding dictionary. Callers asked for a dependency link that was never registered between the two elements.

Solutions

  1. Verify the dependency link exists (e.g. via ContainsLink-style checks) before querying GetLinkIn/GetLinkOut
  2. Register the link first with the builder API that populates the link dictionaries
  3. Ensure asset ids passed are the ones analyzed, not stale ids from a previous analysis pass
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at sources/assets/Stride.Core.Assets/Analysis/AssetDependencies.cs:293 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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

Appendix: source

Thrown at sources/assets/Stride.Core.Assets/Analysis/AssetDependencies.cs:293

    {
        return RemoveLink(ref missingChildren, id, ContentLinkType.All);
    }

    private static void AddLink(ref Dictionary<AssetId, AssetLink>? dictionary, AssetLink contentLink)
    {
        dictionary ??= [];

        var id = contentLink.Element.Id;
        if (dictionary.TryGetValue(id, out var existingLink))
            contentLink.Type |= existingLink.Type;

        dictionary[id] = contentLink;
    }

    private AssetLink GetLink(ref Dictionary<AssetId, AssetLink>? dictionary, AssetId id)
    {
        if (dictionary == null || !dictionary.TryGetValue(id, out var value))
            throw new ArgumentException("There is currently no link between elements '{0}' and '{1}'".ToFormat(Item.Id, id));

        return value;
    }

    private AssetLink RemoveLink(ref Dictionary<AssetId, AssetLink>? dictionary, AssetId id, ContentLinkType type)
    {
        if (dictionary == null || !dictionary.TryGetValue(id, out var oldLink))
            throw new ArgumentException("There is currently no link between elements '{0}' and '{1}'".ToFormat(Item.Id, id));
        var newLink = oldLink;

        newLink.Type &= ~type;
        oldLink.Type &= type;

        if (newLink.Type == 0)
            dictionary.Remove(id);

        if (dictionary.Count == 0)
            dictionary = null;

View on GitHub (pinned to 96fad776d2)