AssemblyDefinition GetCorlib(AssemblyNameReference reference, ReaderParameters parameters)
{
var version = reference.Version;
#if !NET_CORE
var corlib = typeof (object).Assembly.GetName ();
#else
var corlib = typeof (object).GetTypeInfo().Assembly.GetName ();
#endif
if (corlib.Version == version || IsZero (version))
#if !NET_CORE
return GetAssembly (typeof (object).Module.FullyQualifiedName, parameters);
#else
return GetAssembly (typeof (object).GetTypeInfo().Module.FullyQualifiedName, parameters);
#endif
var path = Directory.GetParent (
Directory.GetParent (
#if !NET_CORE
typeof(object).Module.FullyQualifiedName).FullName
#else
typeof(object).GetTypeInfo().Module.FullyQualifiedName).FullName
#endif
).FullName;
if (on_mono) {
if (version.Major == 1)
path = Path.Combine (path, "1.0");
else if (version.Major == 2) {
if (version.MajorRevision == 5)
path = Path.Combine (path, "2.1");
else
path = Path.Combine (path, "2.0");
} else if (version.Major == 4)
path = Path.Combine (path, "4.0");
else
throw new NotSupportedException ("Version not supported: " + version);
} else {
switch (version.Major) {
case 1:
if (version.MajorRevision == 3300)
path = Path.Combine (path, "v1.0.3705");
else
path = Path.Combine (path, "v1.0.5000.0");
break;
case 2:
path = Path.Combine (path, "v2.0.50727");
break;
case 4:
path = Path.Combine (path, "v4.0.30319");
break;
default:
throw new NotSupportedException ("Version not supported: " + version);
}
}
var file = Path.Combine (path, "mscorlib.dll");
if (File.Exists (file))
return GetAssembly (file, parameters);
return null;
}