private void ScanAndLoad(string path) { Logger.Debug("Loading assembly from : {0}", path); Assembly assembly; try { // Load assembly for reflection only to avoid exceptions when referenced assemblyLocations cannot be found assembly = _assemblyWrapper.ReflectionOnlyLoadFrom(path); } catch { Logger.Warn("Failed to scan assembly {0}", path); return; } var isReferencingGaugeLib = assembly.GetReferencedAssemblies() .Select(name => name.Name) .Contains(typeof(Step).Assembly.GetName().Name); var loadableTypes = new HashSet <Type>(isReferencingGaugeLib ? GetLoadableTypes(assembly) : new Type[] {}); // Load assembly so that code can be executed var fullyLoadedAssembly = _assemblyWrapper.LoadFrom(path); var types = GetFullyLoadedTypes(loadableTypes, fullyLoadedAssembly).ToList(); if (isReferencingGaugeLib) { AssembliesReferencingGaugeLib.Add(fullyLoadedAssembly); } ScanForScreengrabber(types); ScanForInstanceManager(types); }
bool LoadAssembly(string assemblyLocation, ref Assembly loadedAssembly) { if (assemblyLocation != null) { loadedAssembly = _assemblyWrapper.LoadFrom(assemblyLocation); LoadDepencencies(loadedAssembly, assemblyLocation); } return(true); }
private void ScanAndLoad(string path) { Logger.Debug($"Loading assembly from : {path}"); var assembly = _assemblyWrapper.LoadFrom(path); var isReferencingGaugeLib = assembly.GetReferencedAssemblies() .Select(name => name.Name) .Contains(GaugeLibAssembleName); if (!isReferencingGaugeLib) { return; } AssembliesReferencingGaugeLib.Add(assembly); try { if (ScreenshotWriter is null) { ScanForCustomScreenshotWriter(assembly.GetTypes()); } if (ScreenshotWriter is null) { ScanForCustomScreengrabber(assembly.GetTypes()); } if (ClassInstanceManagerType is null) { ScanForCustomInstanceManager(assembly.GetTypes()); } } catch (ReflectionTypeLoadException ex) { foreach (var e in ex.LoaderExceptions) { Logger.Error(e.ToString()); } } }
public bool TryLoadAssembly(string assemblyLocation, string assemblyName, out Assembly loadedAssembly) { loadedAssembly = null; var gacPrefix = GlobalConstants.GACPrefix; if (assemblyLocation != null && assemblyLocation.StartsWith(gacPrefix)) { try { try { loadedAssembly = _assemblyWrapper.Load(assemblyName); } catch (Exception e) { if (assemblyLocation.StartsWith(gacPrefix) && loadedAssembly == null) { var assemblyQualified = assemblyLocation.Replace(gacPrefix, ""); var indexOf = assemblyQualified.IndexOf(", processor", StringComparison.InvariantCultureIgnoreCase); var correctAssemblyName = assemblyQualified.Substring(0, indexOf); loadedAssembly = _assemblyWrapper.Load(correctAssemblyName); } Dev2Logger.Error(e); } LoadDepencencies(loadedAssembly, assemblyLocation); return(true); } catch (BadImageFormatException e)//WOLF-1640 { Dev2Logger.Error(e); throw; } catch (Exception e) { Dev2Logger.Error(e.Message); } } else { try { if (assemblyLocation != null) { loadedAssembly = _assemblyWrapper.LoadFrom(assemblyLocation); LoadDepencencies(loadedAssembly, assemblyLocation); } return(true); } catch (BadImageFormatException e)//WOLF-1640 { Dev2Logger.Error(e); throw; } catch { try { if (assemblyLocation != null) { loadedAssembly = _assemblyWrapper.UnsafeLoadFrom(assemblyLocation); LoadDepencencies(loadedAssembly, assemblyLocation); } return(true); } catch (Exception e) { Dev2Logger.Error(e); } } try { if (assemblyLocation != null) { var objHAndle = Activator.CreateInstanceFrom(assemblyLocation, assemblyName); var loadedObject = objHAndle.Unwrap(); loadedAssembly = _assemblyWrapper.GetAssembly(loadedObject.GetType()); } LoadDepencencies(loadedAssembly, assemblyLocation); return(true); } catch (BadImageFormatException e)//WOLF-1640 { Dev2Logger.Error(e); throw; } catch (Exception e) { Dev2Logger.Error(e); } } return(false); }