Пример #1
0
        public ApplicationDirectoryProvider(BaseCommonConfig commonConfig)
        {
            if (!string.IsNullOrWhiteSpace(commonConfig.ApplicationDirectoryOverride))
            {
                ApplicationDirectory = commonConfig.ApplicationDirectoryOverride;
            }
            else
            {
                ApplicationDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            }

            // TODO: Remove this when all code uses IApplicationDirectoryProvider
            Directory.SetCurrentDirectory(ApplicationDirectory);
        }
        /// <summary>
        /// Initializes a new <see cref="AssemblyProvider"/> that uses an assembly scanning blacklist from the provided
        /// <see cref="BaseCommonConfig"/>.
        /// </summary>
        /// <param name="commonConfig"></param>
        public AssemblyProvider(IApplicationDirectoryProvider directoryProvider, BaseCommonConfig commonConfig, ILog log)
        {
            Log = log;
            var filesToScan = Directory.GetFiles(directoryProvider.GetApplicationDirectory(), "*.dll")
                              .Where(p => (commonConfig.AssemblyScanningBlacklist ?? new string[0])
                                     .Contains(Path.GetFileName(p)) == false);

            foreach (string assemblyPath in filesToScan)
            {
                try
                {
                    Assembly.LoadFrom(assemblyPath);
                }
                catch (FileNotFoundException) { }
                catch (FileLoadException) { }
                catch (BadImageFormatException) { }
                catch (ReflectionTypeLoadException) { }
            }

            Assemblies = AppDomain.CurrentDomain
                         .GetAssemblies()
                         .Where(a => a.IsDynamic == false)
                         .ToArray();
        }