in ILRepack/PlatformFixer.cs [103:148]
public void FixPlatformVersion(TypeReference reference)
{
if (reference == null || targetPlatformDirectory == null)
return;
AssemblyNameReference scopeAsm = reference.Scope as AssemblyNameReference;
if (scopeAsm == null)
return;
var platformAsm = GetFixedPlatformVersion(scopeAsm);
if (platformAsm == null)
return;
if (reference is TypeSpecification)
{
FixPlatformVersion(((TypeSpecification)reference).ElementType);
if (reference is OptionalModifierType)
FixPlatformVersion(((OptionalModifierType)reference).ModifierType);
else if (reference is RequiredModifierType)
FixPlatformVersion(((RequiredModifierType)reference).ModifierType);
else if (reference is GenericInstanceType)
{
var instance = (GenericInstanceType)reference;
FixPlatformVersion(instance.ElementType);
if (instance.HasGenericArguments)
foreach (var ga in instance.GenericArguments)
FixPlatformVersion(ga);
}
else if (reference is FunctionPointerType)
{
var instance = (FunctionPointerType)reference;
FixPlatformVersion(instance.ReturnType);
if (instance.HasParameters)
foreach (var p in instance.Parameters)
FixPlatformVersion(p);
}
}
else if (!(reference is GenericParameter))
{
reference.Scope = platformAsm;
}
if (reference.HasGenericParameters)
foreach (var gp in reference.GenericParameters)
FixPlatformVersion(gp);
FixPlatformVersion(reference.DeclaringType);
}