using System; using System.Collections.Generic; using System.IO; using System.Reflection; namespace ANX.Framework.NonXNA.Reflection { internal static class AssemblyLoader { #region Private private static List allAssemblies; #endregion #region Constructor static AssemblyLoader() { allAssemblies = new List(); LoadAssembliesFromFile(); LoadAssembliesFromTypeList(); } #endregion #region GetAllAssemblies public static Assembly[] GetAllAssemblies() { return allAssemblies.ToArray(); } #endregion #region LoadAssembliesFromFile private static void LoadAssembliesFromFile() { #if !ANDROID && !WINDOWSMETRO string executingAssemblyFilepath = Assembly.GetExecutingAssembly().Location; string basePath = Path.GetDirectoryName(executingAssemblyFilepath); string[] allAssembliesFiles = Directory.GetFiles(basePath, "*.dll", SearchOption.TopDirectoryOnly); foreach (string file in allAssembliesFiles) { if (file.Equals(executingAssemblyFilepath) == false) { Logger.Info("[ANX] trying to load '" + file + "'..."); try { Assembly assembly = Assembly.LoadFrom(file); allAssemblies.Add(assembly); } catch { } } } #endif } #endregion #region LoadAssembliesFromTypeList private static void LoadAssembliesFromTypeList() { AssemblyListFile typeListFile = new AssemblyListFile(); typeListFile.Load(); string[] allAssemblyNames = typeListFile.GetAllAssemblyNames(); foreach (string assemblyName in allAssemblyNames) { try { #if WINDOWSMETRO Assembly assembly = Assembly.Load(new AssemblyName(assemblyName)); #else Assembly assembly = Assembly.Load(assemblyName); #endif allAssemblies.Add(assembly); } catch { } } } #endregion } }