private void AddAssemblyUnsafe(Broker b, AssemblyVersionPackage a) { Assembly assembly = null; if (a.Version.FileSymbols != null) { assembly = Assembly.Load(a.ExtractLibrary(), a.ExtractLibrarySymbols()); } else { assembly = Assembly.Load(a.ExtractLibrary()); } string assemblyName = assembly.GetName().Name; AssemblyCard card = new AssemblyCard() { assembly = assembly, AssemblyName = assemblyName }; var type = typeof(IMod); var types = assembly.GetTypes().Where(p => type.IsAssignableFrom(p) && !p.IsInterface); foreach (Type item in types) { b.Modules.RegisterInterface(item, assemblyName); b.RegisterSelfValuedModule(item); } card.Interfaces = (from t in types select t.FullName).ToArray(); loadedAssemblys.Add(assemblyName, card); }
/// <summary> /// This check for conflicts between all modules references <br/> /// this thing about that you don't have isolation to make sure all modules are up to date /// </summary> /// <param name="binPackage"></param> public void RegisterAssets(AssemblyVersionPackage binPackage) { for (int i = 0; i < binPackage.Version.Artefacts.Count; i++) { AssemblyArtifact art = binPackage.Version.Artefacts[i]; if (art.IsAssembly) { if (AssemblyControlList.ContainsKey(art.Name)) { if (AssemblyControlList[art.Name].art.Version != art.Version) { throw new Exception(string.Format("The module {0} has incosistent dependency '{1}'({2}) with other modules - '{3}'({4}): {5}", binPackage.ContainerName, art.Name, art.Version, AssemblyControlList[art.Name].art.Name, AssemblyControlList[art.Name].art.Version, AssemblyControlList[art.Name].IsLocalDependency ? "WorkingDir Dependency" : "Module dependency")); } } else { PackageAndArtefactLibLinked l = new PackageAndArtefactLibLinked { art = art, pckg = binPackage }; AssemblyControlList.Add(art.Name, l); } } } }
public void LoadAssemblys(Broker b) { loadedAssemblys.Clear(); // in order to reject only new modules -if depconflict persist- IEnumerable <SourceControl.BuildServers.SourceController> mods = assemblySources.TakeLoadTime(); foreach (SourceControl.BuildServers.SourceController a in mods) { AssemblyVersionPackage pckg = a.Versions.GetLatestVersion(); string remarks; bool loaded = a.RuntimeLoaded = LoadAssembly(b, pckg, out remarks); a.RuntimeLoadedRevision = pckg.Version.VersionTag; a.RuntimeLoadedRemark = remarks; } }
private bool LoadAssembly(Broker b, AssemblyVersionPackage a, out string remarks) { remarks = string.Empty; try { SharedManagedLibraries.RegisterAssets(a); AddAssemblyUnsafe(b, a); } catch (Exception e) { remarks = string.Format("assembly loading error: '{0}' :: {1} :: {2}", a.ContainerName, e.Message, e.StackTrace); logger.Exception(e, "load assembly", "error loading assembly package ContainerName: {0}", a.ContainerName); return(false); } return(true); }
public AssemblyModule(AssemblyVersionPackage package) { this.package = package; }