コード例 #1
0
        public static void ScanForPlugins(string citrusProjectFile)
        {
            var pluginRoot = Path.ChangeExtension(citrusProjectFile, ".OrangePlugin");

#if DEBUG
            var pluginConfiguration = "Debug";
#else
            var pluginConfiguration = "Release";
#endif
            CurrentPluginDirectory = Path.Combine(pluginRoot, "bin", pluginConfiguration);
            CurrentPlugin?.Finalize?.Invoke();
            The.UI.DestroyPluginUI();
            CurrentPlugin = new OrangePlugin();
            ResetPlugins();
            try {
                if (Directory.Exists(CurrentPluginDirectory))
                {
                    catalog.Catalogs.Add(new DirectoryCatalog(CurrentPluginDirectory));
                    ValidateComposition();
                }
            } catch (BadImageFormatException e) {
                Console.WriteLine(e.Message);
            } catch (System.Exception e) {
                Console.WriteLine(e.Message);
            }
            CurrentPlugin?.Initialize?.Invoke();
            var uiBuilder = The.UI.GetPluginUIBuilder();
            if (uiBuilder != null)
            {
                CurrentPlugin?.BuildUI?.Invoke(uiBuilder);
                The.UI.CreatePluginUI(uiBuilder);
            }
            The.MenuController.CreateAssemblyMenuItems();
        }
コード例 #2
0
ファイル: PluginLoader.cs プロジェクト: kutselabskii/Citrus
        public static void ScanForPlugins()
        {
            CurrentPlugin?.Finalize?.Invoke();
            The.UI.DestroyPluginUI();
            CurrentPlugin = new OrangePlugin();
            resolvedAssemblies.Clear();
            ResetPlugins();
            try {
                foreach (var path in EnumerateCurrentApplicationPluginAssemblyPaths())
                {
                    TryLoadAssembly(path);
                }
                ValidateComposition();
            } catch (BadImageFormatException e) {
                Console.WriteLine(e.Message);
            } catch (System.Exception e) {
                The.UI.ShowError(e.Message);
                Console.WriteLine(e.Message);
            }
            ProcessPluginInitializeActions();
            var uiBuilder = The.UI.GetPluginUIBuilder();

            try {
                if (uiBuilder != null)
                {
                    CurrentPlugin?.BuildUI?.Invoke(uiBuilder);
                    The.UI.CreatePluginUI(uiBuilder);
                }
            } catch (System.Exception e) {
                Orange.UserInterface.Instance.ShowError($"Failed to build Orange Plugin UI with an error: {e.Message}\n{e.StackTrace}");
            }
            The.MenuController.CreateAssemblyMenuItems();
        }
コード例 #3
0
ファイル: PluginLoader.cs プロジェクト: x5f3759df/Citrus
        public static void ScanForPlugins(string citrusProjectFile)
        {
            var pluginRoot = Path.ChangeExtension(citrusProjectFile, ".OrangePlugin");

            CurrentPluginDirectory = Path.Combine(pluginRoot, "bin", pluginConfiguration);
            CurrentPlugin?.Finalize?.Invoke();
            The.UI.DestroyPluginUI();
            CurrentPlugin = new OrangePlugin();
            ResetPlugins();
            try {
                foreach (var path in EnumerateOrangeAndTangerinePluginAssemblyPaths(citrusProjectFile))
                {
                    TryLoadAssembly(path);
                }
#if TANGERINE
                var tangerine = The.Workspace.ProjectJson.GetArray <string>($"{PluginsField}/{TangerineField}");
                if (tangerine != null)
                {
                    foreach (var path in tangerine)
                    {
                        TryLoadAssembly(path);
                    }
                    if (tangerine.Length > 0)
                    {
                        Console.WriteLine("Tangerine specific assemblies loaded successfully");
                    }
                }
                else
                {
                    Console.WriteLine($"WARNING: Field '{TangerineField}' not found in '{PluginsField}' in {citrusProjectFile}");
                }
#else
                var orange = The.Workspace.ProjectJson.GetArray <string>($"{PluginsField}/{OrangeField}");
                if (orange != null)
                {
                    foreach (var path in orange)
                    {
                        TryLoadAssembly(path);
                    }
                    if (orange.Length > 0)
                    {
                        Console.WriteLine("Orange specific assemblies loaded successfully");
                    }
                }
                else
                {
                    Console.WriteLine($"WARNING: Field '{OrangeField}' not found in '{PluginsField}' in {citrusProjectFile}");
                }
#endif
                ValidateComposition();
            } catch (BadImageFormatException e) {
                Console.WriteLine(e.Message);
            } catch (System.Exception e) {
                The.UI.ShowError(e.Message);
                Console.WriteLine(e.Message);
            }
            ProcessPluginInitializeActions();
            var uiBuilder = The.UI.GetPluginUIBuilder();
            try {
                if (uiBuilder != null)
                {
                    CurrentPlugin?.BuildUI?.Invoke(uiBuilder);
                    The.UI.CreatePluginUI(uiBuilder);
                }
            } catch (System.Exception e) {
                Orange.UserInterface.Instance.ShowError($"Failed to build Orange Plugin UI with an error: {e.Message}\n{e.StackTrace}");
            }
            The.MenuController.CreateAssemblyMenuItems();
        }