private void OnRun() { var file = SelectedModel.Path; 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 type = assembly.GetType(SelectedModel.Name); if (type == null) { System.Windows.MessageBox.Show(string.Format(" not found {0} type", SelectedModel.Name)); return; } var ctor = type.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public, Type.DefaultBinder, new Type[0], null); if (ctor == null) { System.Windows.MessageBox.Show(string.Format("{0} type not contain empty Constructor", SelectedModel.Name)); return; } var method = type.GetMethod("Execute", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); if (method == null) { System.Windows.MessageBox.Show(string.Format("not found {0} Execute", method.Name)); return; } Messenger.Default.Send(this, "Closed.Token"); var instance = ctor.Invoke(null); method.Invoke(instance, new object[] { null }); } catch (Exception ex) { System.Windows.MessageBox.Show(ex.Message); } finally { assemblyResolveHelper?.UnRegistered(); } }
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(); } }
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(); } } }
private void OnRun() { const String CFG_ADDIN_DEPS_PATH = "MS_ADDIN_DEPENDENCYPATH"; var file = SelectedModel.Path; var cfgAddinDepsPath = ConfigurationManager.GetVariable(CFG_ADDIN_DEPS_PATH, ConfigurationVariableLevel.User); var assemblyResolveHelper = default(AssemblyResolveHelper); var libDepsPath = Path.GetDirectoryName(file); if (!cfgAddinDepsPath.Contains(libDepsPath)) { ConfigurationManager.DefineVariable(CFG_ADDIN_DEPS_PATH, $"{cfgAddinDepsPath};{libDepsPath}", ConfigurationVariableLevel.User); } 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 type = assembly.GetType(SelectedModel.Name); if (type == null) { System.Windows.MessageBox.Show(string.Format(" not found {0} type", SelectedModel.Name)); return; } var ctor = type.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public, Type.DefaultBinder, new Type[0], null); if (ctor == null) { System.Windows.MessageBox.Show(string.Format("{0} type not contain empty Constructor", SelectedModel.Name)); return; } var method = type.GetMethod("Execute", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); if (method == null) { System.Windows.MessageBox.Show(string.Format("not found {0} Execute", method.Name)); return; } AddinManager.MVVM.Messenger.Default.Send(this, "Closed.Token"); var instance = ctor.Invoke(null); method.Invoke(instance, new object[] { null }); } catch (Exception ex) { System.Windows.MessageBox.Show(ex.Message); } finally { assemblyResolveHelper?.UnRegistered(); } }