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(); } }
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); }
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); } }
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(); } } }