AdvancedLauncher.Management.Internal.PluginManager.LoadFrom C# (CSharp) Method

LoadFrom() private method

private LoadFrom ( string pluginsDirectory ) : List
pluginsDirectory string
return List
        private List<PluginInfo> LoadFrom(string pluginsDirectory)
        {
            string engineAssemblyPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "AdvancedLauncher.SDK.dll");
            string[] pluginList = Directory.GetFiles(pluginsDirectory, "*.dll");
            if (pluginList.Length == 0) {
                return null;
            }

            AppDomainSetup domainSetup = new AppDomainSetup();
            domainSetup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
            domainSetup.PrivateBinPath = "Plugins;bin";

            PermissionSet permissions = new PermissionSet(PermissionState.None);
            permissions.AddPermission(new ReflectionPermission(ReflectionPermissionFlag.MemberAccess));
            permissions.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
            permissions.AddPermission(new FileIOPermission(FileIOPermissionAccess.PathDiscovery | FileIOPermissionAccess.Read, pluginList));

            List<PluginInfo> result;
            var pluginLoader = AppDomain.CreateDomain("PluginLoader", null, domainSetup, permissions);
            try {
                Proxy proxy = (Proxy)pluginLoader.CreateInstanceAndUnwrap(AssemblyName.GetAssemblyName(engineAssemblyPath).FullName, typeof(Proxy).FullName);
                proxy.PluginInfos = new List<PluginInfo>();
                proxy.PluginLibs = pluginList;
                proxy.LoadInfos();
                result = proxy.PluginInfos;
            } finally {
                AppDomain.Unload(pluginLoader);
            }
            return result;
        }