public static class PluginImportersThe importers a worker has to be told about, because it did not load the plugin.
No guide page documents this yet — the page shows what the code says about itself.
Remarks
Doc 36 § Part 6's one correctness gap. BuiltInImporters.Create() folds in ImporterContributions.Default, and in a worker process that set is empty — nothing there has loaded a plugin. So an asset only a plugin can import was imported by the coordinator and refused by the pool, with the difference being which process happened to run it. That is a content build producing different bytes than the editor showed.
The worker is told which assemblies, not which importers. An importer is a live object with a settings type, and there is no way to send one down a pipe; what crosses is the set of file paths the coordinator's own contributed importers came out of, and the worker loads the same files. AssembliesBehind is the coordinator's half and Load is the worker's.
⚠ Built fresh per worker, and deliberately not cached. BuiltInImporters.Create's own remarks say the registry is assembled per run so that the editor and the CLI cannot disagree about the set; a per-process cache of plugin importers would reintroduce exactly that, one level down, and the disagreement would be invisible because a worker is not a process anybody looks inside.
⚠ A plugin that cannot be loaded fails this worker rather than the pool. Crash isolation is the entire reason the workers exist, and the current arrangement gets it for free by not loading the plugin at all. Loading it gives that up unless the failure is contained: Load throws, the worker writes the reason to stderr and exits, and CompilerPool reports a worker that never connected against the run rather than waiting for a pipe that will not open.
⚠ An assembly with no file on disk cannot cross, and that is a real hole rather than a detail. A plugin is a .dll and a project's editor scripts are compiled to one beside the library, so both have a path — but an importer contributed from a dynamic assembly has none, and AssembliesBehind leaves it out. The worker then disagrees again, silently, which is why Missing exists to be reported.
Methods (3)
public static IReadOnlyList<string> AssembliesBehind(ImporterContributions contributions)Where the contributed importers in this process came from, as files.
public static IReadOnlyList<string> Missing(ImporterContributions contributions)The contributed importers that have no file, and so cannot reach a worker.
public static ImporterContributions Load(IEnumerable<string> assemblyPaths)Loads every [Importer] out of the named assemblies.
Used by (4)
- CompilerPoolVixen.AssetCompiler
- PluginImporterTestsVixen.AssetCompiler.Tests
- ProjectPluginsVixen.Cli
- WorkerHostVixen.AssetCompiler