Assembly AssemblyResolve(object sender, ResolveEventArgs e) { AssemblyName name = new AssemblyName(e.Name); LoggingService.Debug("ProjectContentRegistry.AssemblyResolve " + e.Name); string path = Path.Combine(lookupDirectory, name.Name); if (File.Exists(path + ".dll")) { return(Assembly.ReflectionOnlyLoadFrom(path + ".dll")); } if (File.Exists(path + ".exe")) { return(Assembly.ReflectionOnlyLoadFrom(path + ".exe")); } if (File.Exists(path)) { return(Assembly.ReflectionOnlyLoadFrom(path)); } try { LoggingService.Debug("AssemblyResolve trying ReflectionOnlyLoad"); return(Assembly.ReflectionOnlyLoad(e.Name)); } catch (FileNotFoundException) { LoggingService.Warn("AssemblyResolve: ReflectionOnlyLoad failed for " + e.Name); // We can't get the assembly we want. // But propably we can get a similar version of it. GacAssemblyName fixedName = GacInterop.FindBestMatchingAssemblyName(e.Name); LoggingService.Info("AssemblyResolve: FixedName: " + fixedName); return(Assembly.ReflectionOnlyLoad(fixedName.FullName)); } }
public static Assembly ReflectionLoadGacAssembly(string partialName, bool reflectionOnly) { if (reflectionOnly) { GacAssemblyName name = GacInterop.FindBestMatchingAssemblyName(partialName); if (name == null) { return(null); } return(Assembly.ReflectionOnlyLoad(name.FullName)); } else { #pragma warning disable 618 return(Assembly.LoadWithPartialName(partialName)); #pragma warning restore 618 } }
protected virtual IProjectContent LoadProjectContent(string itemInclude, string itemFileName) { string shortName = itemInclude; int pos = shortName.IndexOf(','); if (pos > 0) { shortName = shortName.Substring(0, pos); } Assembly assembly = GetDefaultAssembly(shortName); ReflectionProjectContent pc = null; if (assembly != null) { if (persistence != null) { pc = persistence.LoadProjectContentByAssemblyName(assembly.FullName); } if (pc == null) { pc = new ReflectionProjectContent(assembly, this); if (persistence != null) { persistence.SaveProjectContent(pc); } } } else { // find real file name for cecil: if (File.Exists(itemFileName)) { if (persistence != null) { pc = persistence.LoadProjectContentByAssemblyName(itemFileName); } if (pc == null) { pc = CecilReader.LoadAssembly(itemFileName, this); if (persistence != null) { persistence.SaveProjectContent(pc); } } } else { DomAssemblyName asmName = GacInterop.FindBestMatchingAssemblyName(itemInclude); if (persistence != null && asmName != null) { //LoggingService.Debug("Looking up in DOM cache: " + asmName.FullName); pc = persistence.LoadProjectContentByAssemblyName(asmName.FullName); } if (pc == null && asmName != null) { string subPath = Path.Combine(asmName.ShortName, GetVersion__Token(asmName)); subPath = Path.Combine(subPath, asmName.ShortName + ".dll"); foreach (string dir in Directory.GetDirectories(GacInterop.GacRootPath, "GAC*")) { itemFileName = Path.Combine(dir, subPath); if (File.Exists(itemFileName)) { pc = CecilReader.LoadAssembly(itemFileName, this); if (persistence != null) { persistence.SaveProjectContent(pc); } break; } } } if (pc == null) { HostCallback.ShowAssemblyLoadErrorInternal(itemFileName, itemInclude, "Could not find assembly file."); } } } return(pc); }