public void UnloadAddIn(IAddIn addIn) { if (!this.addIns.Contains(addIn)) { return; } Services.AddIn addIn1 = (Services.AddIn)addIn; List <IPackage> list = new List <IPackage>(); list.AddRange(addIn1.Packages); for (int index = list.Count - 1; index >= 0; --index) { addIn1.UnregisterPackage(list[index]); } this.addIns.Remove(addIn); }
public IAddIn LoadAddIn(string fileName) { if (this.excludedAddIns.Contains(Path.GetFileName(fileName).ToUpperInvariant())) { return((IAddIn)null); } try { switch (Path.GetExtension(fileName).ToUpperInvariant()) { case ".ADDIN": using (XmlReader xmlReader = XmlReader.Create(fileName)) { if (xmlReader.IsStartElement("AddIn")) { if (xmlReader.MoveToAttribute("AssemblyFile")) { return(this.LoadAddIn(Path.Combine(Path.GetDirectoryName(fileName), xmlReader.Value))); } break; } break; } case ".DLL": string str = Path.Combine(Path.GetDirectoryName(this.GetType().Module.FullyQualifiedName), Environment.ExpandEnvironmentVariables(fileName)); if (Microsoft.Expression.Framework.Documents.PathHelper.FileExists(str)) { foreach (IAddIn addIn in this.AddIns) { if (new Uri(str).Equals((object)new Uri(addIn.Location))) { return(addIn); } } Assembly assembly = Assembly.LoadFrom(str); if (assembly != (Assembly)null) { List <Type> list = new List <Type>(); object[] customAttributes = assembly.GetCustomAttributes(typeof(PackageAttribute), false); if (customAttributes != null && customAttributes.Length != 0) { foreach (PackageAttribute packageAttribute in customAttributes) { list.Add(packageAttribute.PackageType); } } else { list.AddRange((IEnumerable <Type>)assembly.GetExportedTypes()); } Services.AddIn addIn = new Services.AddIn(this, str); foreach (Type type in list) { if (typeof(IPackage).IsAssignableFrom(type) && !type.IsAbstract && !type.IsInterface) { IPackage package = Activator.CreateInstance(type) as IPackage; if (package != null) { addIn.RegisterPackage(package); } } } if (!EnumerableExtensions.CountIsMoreThan <IPackage>(addIn.Packages, 0)) { return((IAddIn)null); } this.addIns.Add((IAddIn)addIn); return((IAddIn)addIn); } break; } break; } return((IAddIn)null); } catch (TypeLoadException ex1) { IMessageDisplayService service = this.GetService <IMessageDisplayService>(); if (service != null) { try { service.ShowError(string.Concat(new object[4] { (object)"Addin '", (object)fileName, (object)"' has an issue with a type mismatch\r", (object)ex1 })); } catch (Exception ex2) { } } return((IAddIn)null); } }