Browse Source

UniversalAssemblyResolver: Fix handling of strange assembly references.

pull/1213/head
Siegfried Pammer 7 years ago
parent
commit
cb2ec2bf89
  1. 14
      ICSharpCode.Decompiler/Metadata/UniversalAssemblyResolver.cs

14
ICSharpCode.Decompiler/Metadata/UniversalAssemblyResolver.cs

@ -185,7 +185,7 @@ namespace ICSharpCode.Decompiler.Metadata @@ -185,7 +185,7 @@ namespace ICSharpCode.Decompiler.Metadata
? new[] { framework_dir, Path.Combine(framework_dir, "Facades") }
: new[] { framework_dir };
if (IsZeroVersionOrRetargetable(name)) {
if (IsSpecialVersionOrRetargetable(name)) {
assembly = SearchDirectory(name, framework_dirs);
if (assembly != null)
return assembly;
@ -222,9 +222,9 @@ namespace ICSharpCode.Decompiler.Metadata @@ -222,9 +222,9 @@ namespace ICSharpCode.Decompiler.Metadata
return null;
}
static bool IsZeroVersionOrRetargetable(IAssemblyReference reference)
static bool IsSpecialVersionOrRetargetable(IAssemblyReference reference)
{
return IsZero(reference.Version) || reference.IsRetargetable;
return IsZeroOrAllOnes(reference.Version) || reference.IsRetargetable;
}
string SearchDirectory(IAssemblyReference name, string directory)
@ -243,9 +243,11 @@ namespace ICSharpCode.Decompiler.Metadata @@ -243,9 +243,11 @@ namespace ICSharpCode.Decompiler.Metadata
return null;
}
static bool IsZero(Version version)
static bool IsZeroOrAllOnes(Version version)
{
return version == null || (version.Major == 0 && version.Minor == 0 && version.Build == 0 && version.Revision == 0);
return version == null
|| (version.Major == 0 && version.Minor == 0 && version.Build == 0 && version.Revision == 0)
|| (version.Major == 65535 && version.Minor == 65535 && version.Build == 65535 && version.Revision == 65535);
}
internal static Version ZeroVersion = new Version(0,0,0,0);
@ -255,7 +257,7 @@ namespace ICSharpCode.Decompiler.Metadata @@ -255,7 +257,7 @@ namespace ICSharpCode.Decompiler.Metadata
var version = reference.Version;
var corlib = typeof(object).Assembly.GetName();
if (corlib.Version == version || IsZeroVersionOrRetargetable(reference))
if (corlib.Version == version || IsSpecialVersionOrRetargetable(reference))
return typeof(object).Module.FullyQualifiedName;
string path;

Loading…
Cancel
Save