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
     }
 }