static string ResolveReference(string baseDirectory, AssemblyNameReference reference, bool ignoreGacAssembly) { string file = null; if (!ignoreGacAssembly) { file = GacInterop.FindAssemblyInNetGac(reference); } if (file == null) { if (File.Exists(Path.Combine(baseDirectory, reference.Name + ".dll"))) { file = Path.Combine(baseDirectory, reference.Name + ".dll"); } else if (File.Exists(Path.Combine(baseDirectory, reference.Name + ".exe"))) { file = Path.Combine(baseDirectory, reference.Name + ".exe"); } } return(file); }
static void TryResolveAssemblyName(ref string fileName) { if (fileName.Contains('\\') || fileName.Contains('/') || fileName.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) || fileName.EndsWith(".exe", StringComparison.OrdinalIgnoreCase)) { return; } try { var pattern = AssemblyNameReference.Parse(fileName); var patternVersion = new Version(pattern.Version.Major, pattern.Version.Minor, pattern.Version.Build == -1 ? 0 : pattern.Version.Build, pattern.Version.Revision == -1 ? 0 : pattern.Version.Revision); foreach (var name in GacInterop.GetGacAssemblyFullNames().Where( n => string.Equals(n.Name, pattern.Name, StringComparison.OrdinalIgnoreCase) && (pattern.Version == null || n.Version.Equals(patternVersion))) ) { fileName = GacInterop.FindAssemblyInNetGac(name) ?? fileName; } } catch (Exception ex) { // ignore exceptions } }