public virtual AssemblyIdentity ProbeAssemblyReference(IUnit referringUnit, AssemblyIdentity referencedAssembly) {
AssemblyIdentity result;
if (!string.IsNullOrEmpty(referringUnit.Location)) {
// probe for in the same directory as the referring unit
var referringDir = Path.GetDirectoryName(Path.GetFullPath(referringUnit.Location));
result = this.Probe(referringDir, referencedAssembly);
if (result != null) return result;
}
// Probe in the libPaths directories
foreach (string libPath in this.LibPaths) {
Contract.Assume(libPath != null);
result = this.Probe(libPath, referencedAssembly);
if (result != null) return result;
}
// Check GAC
#if !COMPACTFX
if (this.SearchInGAC) {
string/*?*/ gacLocation = GlobalAssemblyCache.GetLocation(referencedAssembly, this);
if (gacLocation != null) {
return new AssemblyIdentity(referencedAssembly, gacLocation);
}
}
#endif
// Check platform location
var platformDir = Path.GetDirectoryName(Path.GetFullPath(GetLocalPath(typeof(object).Assembly.GetName())))??"";
var coreVersion = this.CoreAssemblySymbolicIdentity.Version;
if (coreVersion.Major == 1) {
if (coreVersion.Minor == 0)
platformDir = Path.Combine(Path.GetDirectoryName(platformDir)??"", "v1.0.3705");
else if (coreVersion.Minor == 1)
platformDir = Path.Combine(Path.GetDirectoryName(platformDir)??"", "v1.1.4322");
} else if (coreVersion.Major == 2) {
platformDir = Path.Combine(Path.GetDirectoryName(platformDir)??"", "v3.5");
result = this.Probe(platformDir, referencedAssembly);
if (result != null) return result;
platformDir = Path.Combine(Path.GetDirectoryName(platformDir)??"", "v3.0");
result = this.Probe(platformDir, referencedAssembly);
if (result != null) return result;
platformDir = Path.Combine(Path.GetDirectoryName(platformDir)??"", "v2.0.50727");
} else if (coreVersion.Major == 4) {
platformDir = Path.Combine(Path.GetDirectoryName(platformDir)??"", "v4.0.30319");
}
result = this.Probe(platformDir, referencedAssembly);
if (result != null) return result;
// Give up
return new AssemblyIdentity(referencedAssembly, "unknown://location");
}