public AssemblyInterfaceData(IAssemblyWrapper assemblyToAnalyze) { Assembly = assemblyToAnalyze; Name = Assembly.GetName().Name; Version = "v" + Assembly.GetName().Version; CLRVersion = Assembly.ImageRuntimeVersion; ReferencedAssemblies = Assembly.GetReferencedAssemblies().Select(x => x.FullName).ToList(); var types = Assembly.GetTypes(); foreach (var type in types) { var typeEnumValue = GetTypeEnumValueForType(type); switch (typeEnumValue) { case TypeEnum.Class: Classes.Add(new ClassTypeData(type)); break; case TypeEnum.Interface: Interfaces.Add(new InterfaceTypeData(type)); break; case TypeEnum.Enum: Enums.Add(new EnumTypeData(type)); break; case TypeEnum.Struct: Structs.Add(new StructTypeData(type)); break; } } Classes = Classes.OrderBy(x => x.Name).ToList(); Interfaces = Interfaces.OrderBy(x => x.Name).ToList(); Enums = Enums.OrderBy(x => x.Name).ToList(); Structs = Structs.OrderBy(x => x.Name).ToList(); }
protected virtual void HotReplaceAssembly(IAssemblyWrapper wrapper, MemoryStream stream) { }
public AssemblyLoader(IAssemblyWrapper assemblyWrapper) { _assemblyWrapper = assemblyWrapper; }
public PluginHandler(IReporter reporter, IFileSystem fileSystem, IAssemblyWrapper assemblyWrapper) { _reporter = reporter; _fileSystem = fileSystem; _assemblyWrapper = assemblyWrapper; }
protected override void HotReplaceAssembly(IAssemblyWrapper wrapper, MemoryStream stream) { var ilspyWrapper = wrapper as ILSpyAssemblyWrapper; if (ilspyWrapper == null) return; var loadedAssembly = ilspyWrapper.LoadedAssembly; if (loadedAssembly == null) return; loadedAssembly.AssemblyList.HotReplaceAssembly(loadedAssembly.FileName, stream); }
private static IReadOnlyCollection <Type> SearchCompositionRootTypes(IAssemblyWrapper assembly) { return(assembly.Types.Where(t => t.IsImplements <ICompositionRoot>()).ToList()); }
public AssemblyLoader(string runnerBasePath, IAssemblyWrapper assemblyWrapper, IFileWrapper fileWrapper, IEnumerable <string> assemblyLocations) { AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => { var logger = LogManager.GetLogger("AssemblyLoader"); logger.Debug("Loading {0}", args.Name); try { var assemblyName = args.Name.Split(',').FirstOrDefault(); var gaugeBinDir = AssemblyLocater.GetGaugeBinDir(); var probePath = Path.GetFullPath(Path.Combine(gaugeBinDir, string.Format("{0}.dll", assemblyName))); if (File.Exists(probePath)) { return(Assembly.LoadFrom(probePath)); } probePath = Path.GetFullPath(Path.Combine(runnerBasePath, string.Format("{0}.dll", assemblyName))); if (File.Exists(probePath)) { return(Assembly.LoadFrom(probePath)); } var executingAssembly = Assembly.GetExecutingAssembly(); return(executingAssembly.GetName().Name == assemblyName ? executingAssembly : null); } catch (Exception e) { logger.Error(e); return(null); } }; AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += (sender, args) => { var logger = LogManager.GetLogger("AssemblyLoader"); logger.Debug("Reflection only Loading {0}", args.Name); try { var assemblyName = args.Name.Split(',').FirstOrDefault(); var gaugeBinDir = AssemblyLocater.GetGaugeBinDir(); var probePath = Path.GetFullPath(Path.Combine(gaugeBinDir, string.Format("{0}.dll", assemblyName))); if (File.Exists(probePath)) { return(Assembly.ReflectionOnlyLoadFrom(probePath)); } probePath = Path.GetFullPath(Path.Combine(runnerBasePath, string.Format("{0}.dll", assemblyName))); return(File.Exists(probePath) ? Assembly.ReflectionOnlyLoadFrom(probePath) : null); } catch (Exception e) { logger.Error(e); return(null); } }; _assemblyWrapper = assemblyWrapper; _fileWrapper = fileWrapper; LoadTargetLibAssembly(); AssembliesReferencingGaugeLib = new List <Assembly>(); ScreengrabberTypes = new List <Type>(); ClassInstanceManagerTypes = new List <Type>(); foreach (var location in assemblyLocations) { ScanAndLoad(location); } }
public PluginHandler(IReporter reporter, IFileSystem fileSystem, IAssemblyWrapper assemblyWrapper) { this.reporter = reporter; this.fileSystem = fileSystem; this.assemblyWrapper = assemblyWrapper; }