/// <summary> /// /// </summary> /// <param name="programPath"></param> /// <returns>The First element in the tuple is an assembly path. /// The second is a full name of an assembly, /// The third is a level on which assembly was loaded.</returns> public static IEnumerable <ReferencedAssemblyInfo> GetReferencedAssemblies(string programPath, bool loadInSeperateDomain = true) { if (loadInSeperateDomain) { AppDomainSetup info = new AppDomainSetup(); info.ApplicationBase = Path.GetDirectoryName(programPath); Evidence ev = AppDomain.CurrentDomain.Evidence; AppDomain domain = AppDomain.CreateDomain("ReferencedAssembliesLoaderDomain", ev, info); try { InternalLoader internalLoader = (InternalLoader)(domain.CreateInstanceFromAndUnwrap(Assembly.GetExecutingAssembly().Location, typeof(InternalLoader).FullName)); return(internalLoader.GetReferencedAssemblies(programPath)); } finally { AppDomain.Unload(domain); } } else { return(new InternalLoader().GetReferencedAssemblies(programPath)); } }
public static bool IsAssemblyIntalled(string fullName, bool onlyInGAC) { AppDomain domain = AppDomain.CreateDomain("AssemblyTesterDomain"); try { InternalLoader internalLoader = (InternalLoader)(domain.CreateInstanceFromAndUnwrap(Assembly.GetExecutingAssembly().Location, typeof(InternalLoader).FullName)); return(internalLoader.IsAssemblyIntalled(fullName, onlyInGAC)); } finally { AppDomain.Unload(domain); } }