コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: AssemblyLoader.cs プロジェクト: tuga1975/Warewolf
 bool LoadAssembly(string assemblyLocation, ref Assembly loadedAssembly)
 {
     if (assemblyLocation != null)
     {
         loadedAssembly = _assemblyWrapper.LoadFrom(assemblyLocation);
         LoadDepencencies(loadedAssembly, assemblyLocation);
     }
     return(true);
 }
コード例 #3
0
        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());
                }
            }
        }
コード例 #4
0
        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);
        }