Ejemplo n.º 1
0
        private void loadModel(string path)
        {
            if (string.IsNullOrEmpty(path))
            {
                return;
            }

            var assemblyResolveHelper = default(AssemblyResolveHelper);

            try
            {
                assemblyResolveHelper = new AssemblyResolveHelper();

                var assembly = assemblyResolveHelper.Registered(path);

                if (assembly == null)
                {
                    System.Windows.MessageBox.Show("Assembly is resolve fail , please check if the dependencies are missing !");
                    return;
                }

                var types = assembly.GetTypes().Where(x => x.GetAttribue <AddInAttribute>() != null && x.GetInterface(typeof(ICommand).FullName) != null).ToList();

                if (types.Count == 0)
                {
                    return;
                }

                var addin = Models.FirstOrDefault(x => x.Name == assembly.GetName().Name);

                if (addin != null)
                {
                    Models.Remove(addin);
                }

                var model = new AddInModel()
                {
                    Name = assembly.GetName().Name, Path = path
                };

                foreach (var item in types)
                {
                    model.Childs.Add(new AddInModel()
                    {
                        Name   = item.FullName,
                        Path   = path,
                        Parent = model
                    });
                }

                Models.Add(model);
            }
            finally
            {
                assemblyResolveHelper?.UnRegistered();
            }
        }
Ejemplo n.º 2
0
        public static AddInModel CreateAddInModel(string dnaPath, bool excludeHidden)
        {
            var model           = new AddInModel();
            var dnaLibrary      = DnaLibrary.LoadFrom(dnaPath);
            var defaultCategory = dnaLibrary.Name;

            //var functions = new List<FunctionModel>();

            model.DnaFileName = Path.GetFileNameWithoutExtension(dnaPath);

            if (dnaLibrary.Name != null)
            {
                model.ProjectName = dnaLibrary.Name;
            }
            else
            {
                model.ProjectName = model.DnaFileName;
            }

            // process function libraries

            model.Categories =
                dnaLibrary
                .ExternalLibraries
                .SelectMany(library =>
                            Assembly.LoadFrom(dnaLibrary.ResolvePath(library.Path))
                            .GetExportedTypes()
                            .SelectMany(t => t.GetMethods())
                            .Where(m => ExcelDnaHelper.IsValidFunction(m, library.ExplicitExports))
                            .Select(m => CreateFunctionModel(m, defaultCategory)))
                .Where(m => excludeHidden && !m.IsHidden)     //Used to exclude hidden functions
                .GroupBy(f => f.Category)
                .Select(g => new CategoryModel {
                Name = g.Key, Functions = g.OrderBy(f => f.Name)
            })
                .OrderBy(c => c.Name);

            // find ExcelCommands

            model.Commands =
                dnaLibrary
                .ExternalLibraries
                .SelectMany(library =>
                            Assembly.LoadFrom(dnaLibrary.ResolvePath(library.Path))
                            .GetExportedTypes()
                            .SelectMany(t => t.GetMethods())
                            .Where(m => ExcelDnaHelper.IsValidCommand(m))
                            .Select(m => CreateCommandModel(m, defaultCategory)))
                .OrderBy(c => c.Name);

            return(model);
        }
Ejemplo n.º 3
0
        private void OnLoad()
        {
            var openFileDialog = new OpenFileDialog
            {
                Title = "请选择要加载的程序集..."
            };

            if (openFileDialog.ShowDialog() == true)
            {
                var file = openFileDialog.FileName;

                var assembly = AssemblyDefinition.ReadAssembly(file);

                var types = assembly.Modules[0].Types.Where(x => x.HasInterfaces &&
                                                            x.Interfaces.Any(n => n.FullName == typeof(ICommand).FullName))
                            .ToList();

                if (types.Count == 0)
                {
                    return;
                }

                var addin = Models.FirstOrDefault(x => x.Name == assembly.Name.Name);

                if (addin != null)
                {
                    Models.Remove(addin);
                }

                var model = new AddInModel()
                {
                    Name = assembly.Name.Name, Path = file
                };

                foreach (var item in types)
                {
                    model.Childs.Add(new AddInModel()
                    {
                        Name   = item.FullName,
                        Path   = file,
                        Parent = model
                    });
                }

                Models.Add(model);
            }
        }
Ejemplo n.º 4
0
        private void OnLoad()
        {
            var openFileDialog = new OpenFileDialog
            {
                Title = "请选择要加载的程序集..."
            };

            if (openFileDialog.ShowDialog() == true)
            {
                var file = openFileDialog.FileName;

                var assemblyResolveHelper = default(AssemblyResolveHelper);

                try
                {
                    assemblyResolveHelper = new AssemblyResolveHelper();

                    var assembly = assemblyResolveHelper.Registered(file);

                    if (assembly == null)
                    {
                        System.Windows.MessageBox.Show("Assembly is resolve fail , please check if the dependencies are missing !");
                        return;
                    }

                    var types = assembly.GetTypes().Where(x => x.GetAttribue <AddInAttribute>() != null && x.GetInterface(typeof(ICommand).FullName) != null).ToList();

                    if (types.Count == 0)
                    {
                        return;
                    }

                    var addin = Models.FirstOrDefault(x => x.Name == assembly.GetName().Name);

                    if (addin != null)
                    {
                        Models.Remove(addin);
                    }

                    var model = new AddInModel()
                    {
                        Name = assembly.GetName().Name, Path = file
                    };

                    foreach (var item in types)
                    {
                        model.Childs.Add(new AddInModel()
                        {
                            Name   = item.FullName,
                            Path   = file,
                            Parent = model
                        });
                    }

                    Models.Add(model);
                }
                finally
                {
                    assemblyResolveHelper?.UnRegistered();
                }
            }
        }