in src/lib/Microsoft.Fx.Portability.MetadataReader/DependencyFinderEngineHelper.cs [66:133]
public void ComputeData()
{
var provider = new MemberMetadataInfoTypeProvider(_reader);
// Get type references
foreach (var handle in _reader.TypeReferences)
{
try
{
var entry = _reader.GetTypeReference(handle);
var typeInfo = provider.GetFullName(entry);
var assembly = GetAssembly(typeInfo);
var typeReferenceMemberDependency = CreateMemberDependency(typeInfo, assembly);
if (typeReferenceMemberDependency != null)
{
MemberDependency.Add(typeReferenceMemberDependency);
}
}
catch (BadImageFormatException)
{
// Some obfuscators will inject dead types that break decompilers
// (for example, types that serve as each others' scopes).
//
// For portability/compatibility analysis purposes, though,
// we can skip such malformed references and just analyze those
// that we can successfully decode.
}
}
if (_reader.MemberReferences.Any())
{
// Primitives need to have their assembly set, so we search for a
// reference to System.Object that is considered a possible
// framework assembly and use that for any primitives that don't
// have an assembly
if (_objectFinder.TryGetSystemRuntimeAssemblyInformation(_reader, out var systemObjectAssembly))
{
// Get member references
foreach (var handle in _reader.MemberReferences)
{
try
{
var entry = _reader.GetMemberReference(handle);
var memberReferenceMemberDependency = GetMemberReferenceMemberDependency(entry, systemObjectAssembly);
if (memberReferenceMemberDependency != null)
{
MemberDependency.Add(memberReferenceMemberDependency);
}
}
catch (BadImageFormatException)
{
// Some obfuscators will inject dead types that break decompilers
// (for example, types that serve as each others' scopes).
//
// For portability/compatibility analysis purposes, though,
// we can skip such malformed references and just analyze those
// that we can successfully decode.
}
}
}
else
{
throw new SystemObjectNotFoundException();
}
}
}