+ return null;
+ }
+
+ // tries to resolve reference from the given file path, and compares assembly names
+ // if @specific_version == true, and logs accordingly
+ ResolvedReference ResolveReferenceForPath (string filename, ITaskItem reference, AssemblyName aname,
+ string error_message, SearchPath spath, bool specific_version)
+ {
+ AssemblyName found_aname;
+ if (!TryGetAssemblyNameFromFile (filename, out found_aname)) {
+ if (error_message != null)
+ log.LogMessage (MessageImportance.Low, error_message);
+ return null;
+ }
+
+ if (!specific_version || AssemblyNamesCompatible (aname, found_aname, specific_version)) {
+ // Check compatibility only if specific_version == true
+ return GetResolvedReference (reference, filename, found_aname, true, spath);
+ } else {
+ LogSearchMessage ("Considered '{0}', but assembly name '{1}' did not match the " +
+ "expected '{2}' (SpecificVersion={3})", filename, found_aname, aname, specific_version);
+ log.LogMessage (MessageImportance.Low, "Assembly names are not compatible.");
+ }
+
+ return null;
+ }
+
+ TargetFrameworkAssemblies PopulateTargetFrameworkAssemblies (string directory)
+ {
+ TargetFrameworkAssemblies gac_asm = new TargetFrameworkAssemblies (directory);
+ foreach (string file in Directory.GetFiles (directory, "*.dll")) {
+ AssemblyName aname;
+ if (TryGetAssemblyNameFromFile (file, out aname))
+ gac_asm.NameToAssemblyNameCache [aname.Name] =
+ new KeyValuePair<AssemblyName, string> (aname, file);
+ }
+
+ return gac_asm;