in src/lib/Microsoft.Fx.Portability.Cci/HostEnvironment.cs [682:720]
public IEnumerable<IAssembly> LoadAssemblies(IEnumerable<AssemblyIdentity> identities, bool warnOnVersionMismatch, Action<string, ErrorTreatment> logErrorOrWarningCallback)
{
List<IAssembly> matchingAssemblies = new List<IAssembly>();
foreach (var unmappedIdentity in identities)
{
// Remap the name and clear the location.
var identity = new AssemblyIdentity(this.NameTable.GetNameFor(unmappedIdentity.Name.Value),
unmappedIdentity.Culture, unmappedIdentity.Version, unmappedIdentity.PublicKeyToken, string.Empty);
var matchingIdentity = this.ProbeLibPaths(identity);
var matchingAssembly = this.LoadAssembly(matchingIdentity);
if ((matchingAssembly == null || matchingAssembly == Dummy.Assembly) && logErrorOrWarningCallback != null)
{
var message = string.Format(CultureInfo.CurrentCulture, "Failed to find or load matching assembly '{0}'.", identity.Name.Value);
logErrorOrWarningCallback(message, LoadErrorTreatment);
continue;
}
if (!identity.Version.Equals(matchingAssembly.Version) && logErrorOrWarningCallback != null && warnOnVersionMismatch)
{
var message = string.Format(CultureInfo.CurrentCulture, "Found '{0}' with version '{1}' instead of '{2}'.", identity.Name.Value, matchingAssembly.Version, identity.Version);
logErrorOrWarningCallback(message, ErrorTreatment.TreatAsWarning);
}
string idPKT = identity.GetPublicKeyToken();
string matchingPKT = matchingAssembly.GetPublicKeyToken();
if (!idPKT.Equals(matchingPKT, StringComparison.OrdinalIgnoreCase) && logErrorOrWarningCallback != null)
{
string message = string.Format(CultureInfo.CurrentCulture, "Found '{0}' with PublicKeyToken '{1}' instead of '{2}'.", identity.Name.Value, matchingPKT, idPKT);
logErrorOrWarningCallback(message, ErrorTreatment.TreatAsWarning);
}
matchingAssemblies.Add(matchingAssembly);
}
return matchingAssemblies;
}