/// <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)); } } }
/// <summary> /// Simple helper /// </summary> /// <param name="e"></param> /// <param name="assamblyname"></param> private void IsHandeld(Exception e, string assamblyname) { ImportPool.AddFailMessage(assamblyname, e); }
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); } }