{"record":{"id":"f98c56fd48ab2a8d","repo":"Unity-Technologies/UnityCsReference","slug":"name-does-not-appear-to-be-built-in-il2cppfolde","errorCode":null,"errorMessage":"{name} does not appear to be built in {il2CppFolder}","messagePattern":"(.+?) does not appear to be built in (.+?)","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs","lineNumber":649,"sourceCode":"            if (isDevelopmentLocation)\n            {\n                // Locating the correct development build to use is a little tricky.  Complications come from\n                // 1) We don't know if the Debug or Release build is desired.  To overcome this we will pick whichever was modified most recently\n\n                var topLevel = il2CppFolder;\n                if (customRoot != null)\n                    topLevel = Path.Combine(topLevel, customRoot);\n\n                var toolBinDirectory = Path.Combine(topLevel, name, \"bin\").ToNPath();\n#pragma warning disable UA2001 // The Banned API Analyzer produces compile errors for any new Linq code. This pre-existing usage has been suppressed, but should be rewritten if possible.\n                var candidates = toolBinDirectory.Files($\"*{expectedToolExecutableName}\", recurse: true)\n#pragma warning restore UA2001\n                    .Where(f => f.Parent.FileName == tfm)\n                    .OrderByDescending(f => f.GetLastWriteTimeUtc())\n                    .ToArray();\n\n                if (candidates.Length == 0)\n                    throw new InvalidOperationException($\"{name} does not appear to be built in {il2CppFolder}\");\n\n                return candidates[0].Parent.ToString();\n            }\n\n            throw new ArgumentException($\"Could not locate assembly for {name}\");\n        }\n\n        internal static string ConstructBeeLibrarySearchPath()\n        {\n            var projectBinDirs = new[]\n            {\n                GetLibrarySearchPaths(\"Unity.Options\", \"netstandard2.0\", \"external/UnityOptions\"),\n                GetLibrarySearchPaths(\"Unity.Linker.Api\", \"netstandard2.0\"),\n                GetLibrarySearchPaths(\"Unity.IL2CPP.Api\", \"netstandard2.0\"),\n                GetLibrarySearchPaths(\"Unity.Api.Attributes\", \"netstandard2.0\"),\n                GetLibrarySearchPaths(\"Unity.IL2CPP.Bee.IL2CPPExeCompileCppBuildProgram.Data\", \"netstandard2.0\"),\n                GetLibrarySearchPaths(\"Unity.IL2CPP.Bee.BuildLogic\", \"net10.0\"),\n                // Now the quirky part.  We need to locate the platform build logic assemblies.","sourceCodeStart":631,"sourceCodeEnd":667,"githubUrl":"https://github.com/Unity-Technologies/UnityCsReference/blob/225b0fbdb57cc17d094e8056b71f8314aba56f73/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs#L631-L667","documentation":"Thrown by GetLibrarySearchPaths when operating in a dev IL2CPP location: it searches <topLevel>/<customRoot?>/<name>/bin for assemblies whose parent folder name equals the requested TFM, and if none are found it reports the tool isn't built in that folder.","triggerScenarios":"GetLibrarySearchPaths(\"Unity.Options\", \"netstandard2.0\", ...) or similar is called while isDevelopmentLocation is true, but the named assembly was never compiled to bin/<config>/<tfm>/, or the TFM string passed does not match any actual output folder.","commonSituations":"Constructing the bee library search path (ConstructBeeLibrarySearchPath) against an IL2CPP enlistment missing one of the required support assemblies (Unity.Options, Unity.Linker.Api, etc.); passing a TFM like 'net10.0' when outputs are actually under 'netstandard2.0'.","solutions":["Build the specific support assembly in the dev enlistment so bin/<config>/<tfm>/<name>.dll exists.","Ensure the requested TFM string matches the TFM the toolchain actually built (check bin subfolders).","Build the whole IL2CPP bee solution so all required libraries are present."],"exampleFix":"/* no source edit */\n// before: GetLibrarySearchPaths(\"Unity.IL2CPP.Api\", \"netstandard2.0\") -> throws\n// after: build Unity.IL2CPP.Api first\n//   bee Unity.IL2CPP.Api::Unity.IL2CPP.Api\n// then ConstructBeeLibrarySearchPath() succeeds","handlingStrategy":"validation","validationCode":"var dir = Path.Combine(topLevel, customRoot ?? \"\", name, \"bin\");\nif (!Directory.Exists(dir) ||\n    !Directory.EnumerateDirectories(dir, tfm, SearchOption.AllDirectories).Any())\n    throw new InvalidOperationException($\"Build {name} for TFM {tfm} in {dir} before constructing the search path.\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Build the full IL2CPP bee solution so all support assemblies exist under their TFMs.","Match the requested TFM string to the actual bin subfolder name."],"tags":["il2cpp","dev-build","bee","library-search-path","tfm"],"backgroundTag":null,"analyzedSha":"225b0fbdb57cc17d094e8056b71f8314aba56f73","analyzedAt":"2026-08-13T19:07:19.849Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}