Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
            }
        }