private void AddDependency(CompilablePlugin plugin)
        {
            if (plugin.IsLoading || this.plugins.Contains(plugin) || this.queuedPlugins.Contains(plugin))
            {
                return;
            }
            CompiledAssembly compiledAssembly = plugin.CompiledAssembly;

            if (compiledAssembly == null || compiledAssembly.IsOutdated())
            {
                this.Add(plugin);
            }
            else
            {
                this.referencedPlugins.Add(plugin.Name);
                if (!this.references.ContainsKey(compiledAssembly.Name))
                {
                    this.references[compiledAssembly.Name] = new CompilerFile(compiledAssembly.Name, compiledAssembly.RawAssembly);
                    return;
                }
            }
        }
        private void AddDependency(CompilablePlugin plugin)
        {
            if (plugin.IsLoading || plugins.Contains(plugin) || queuedPlugins.Contains(plugin))
            {
                return;
            }

            CompiledAssembly compiledDependency = plugin.CompiledAssembly;

            if (compiledDependency != null && !compiledDependency.IsOutdated())
            {
                // The dependency already has a compiled assembly which is up to date
                referencedPlugins.Add(plugin.Name);
                if (!references.ContainsKey(compiledDependency.Name))
                {
                    references[compiledDependency.Name] = new CompilerFile(compiledDependency.Name, compiledDependency.RawAssembly);
                }
            }
            else
            {
                // The dependency needs to be compiled
                Add(plugin);
            }
        }