Пример #1
0
        /// <summary>
        ///     Unloads a Assambly From the Mef Container.
        ///     It does NOT unload it from the Domain
        /// </summary>
        /// <param name="assambly">Your Target assambly</param>
        public void FreeAssambly(Assembly assambly)
        {
            var assemblyName = assambly.Location;
            var all          = _aggregateCatalog.Catalogs.Where(s =>
            {
                var assemblyCatalog = s as AssemblyCatalog;
                if (assemblyCatalog != null)
                {
                    var assamblName = assemblyCatalog.Assembly;
                    var fn          = assamblName.Location;
                    return(assemblyName == fn);
                }
                return(false);
            }).Cast <AssemblyCatalog>();

            var assemblyCatalogs = all as AssemblyCatalog[] ?? all.ToArray();

            if (!assemblyCatalogs.Any())
            {
                ImportPool.AddImportFailMessage(assambly);
                return;
            }

            AssemblyCatalog first;

            if (assemblyCatalogs.Count() != 1)
            {
                var version = assemblyCatalogs.Max(s => AssemblyName.GetAssemblyName(s.Assembly.FullName).Version);
                first =
                    assemblyCatalogs.FirstOrDefault(
                        s => AssemblyName.GetAssemblyName(s.Assembly.FullName).Version == version);
            }
            else
            {
                first = assemblyCatalogs.FirstOrDefault();
            }

            if (first != null)
            {
                var parts = first.Parts;

                if (Changing != null)
                {
                    Changing.Invoke(this,
                                    new ComposablePartCatalogChangeEventArgs(new List <ComposablePartDefinition>(), parts,
                                                                             null));
                }

                _aggregateCatalog.Catalogs.Remove(first);

                ImportPool.AddSuccessExcludedMessage(assambly);

                if (Changed != null)
                {
                    Changed.Invoke(this,
                                   new ComposablePartCatalogChangeEventArgs(new List <ComposablePartDefinition>(), parts,
                                                                            null));
                }
            }
        }
Пример #2
0
 /// <summary>
 ///     Simple helper
 /// </summary>
 /// <param name="e"></param>
 /// <param name="assamblyname"></param>
 private void IsHandeld(Exception e, string assamblyname)
 {
     ImportPool.AddFailMessage(assamblyname, e);
 }
Пример #3
0
        private void CheckAndAddAssambly(string filename, Action cancel)
        {
            AssemblyName assemblyName = null;

            try
            {
                assemblyName = AssemblyName.GetAssemblyName(filename);
            }
            catch (ArgumentException e)
            {
                IsHandeld(e, filename);
                return;
            }
            catch (BadImageFormatException e)
            {
                IsHandeld(e, filename);
                return;
            }
            catch (FileLoadException e)
            {
                IsHandeld(e, filename);
                return;
            }
            catch (FileNotFoundException e)
            {
                IsHandeld(e, filename);
                return;
            }
            catch (PlatformNotSupportedException e)
            {
                IsHandeld(e, filename);
                return;
            }
            catch (SecurityException e)
            {
                IsHandeld(e, filename);
                return;
            }
            catch (Exception e)
            {
                IsHandeld(e, filename);
                Console.WriteLine("first chance exception of type '" + e.GetType() + "' in assambly '" + filename +
                                  "' was NOT Handeled by StrongNameCatalog ...");
                cancel();
            }

            if (assemblyName == null)
            {
                return;
            }
#if (SECLOADING)
            var publicKey = assemblyName.GetPublicKey();

            if (publicKey == null)
            {
                continue;
            }

            var trusted = _trustedKeys.Any(trustedKey => assemblyName.GetPublicKey().SequenceEqual(trustedKey));

            if (!trusted)
            {
                continue;
            }
#endif
            try
            {
                var assam = new AssemblyCatalog(filename);

                if (!assam.Parts.Any())
                {
                    ImportPool.AddNotAnImportMessage(assam.Assembly);
                    return;
                }

                if (_aggregateCatalog.Catalogs.Any(s => s.ToString() == assam.ToString()))
                {
                    return;
                }

                if (Changing != null)
                {
                    Changing.Invoke(this,
                                    new ComposablePartCatalogChangeEventArgs(assam.Parts,
                                                                             new List <ComposablePartDefinition>(), null));
                }

                _aggregateCatalog.Catalogs.Add(assam);
                ImportPool.AddSuccessIncludedMessage(filename);

                if (Changed != null)
                {
                    Changed.Invoke(this,
                                   new ComposablePartCatalogChangeEventArgs(assam.Parts,
                                                                            new List <ComposablePartDefinition>(), null));
                }
            }
            catch (Exception e)
            {
                IsHandeld(e, filename);
            }
        }