diff --git a/src/AsmResolver.DotNet/DefaultMetadataResolver.cs b/src/AsmResolver.DotNet/DefaultMetadataResolver.cs index 30bab5716..18e57b9e5 100644 --- a/src/AsmResolver.DotNet/DefaultMetadataResolver.cs +++ b/src/AsmResolver.DotNet/DefaultMetadataResolver.cs @@ -15,7 +15,7 @@ public class DefaultMetadataResolver : IMetadataResolver private readonly ConcurrentDictionary _typeCache; private readonly SignatureComparer _comparer = new() { - AcceptNewerAssemblyVersionNumbers = true + IgnoreAssemblyVersionNumbers = true }; /// diff --git a/test/AsmResolver.DotNet.Tests/MetadataResolverTest.cs b/test/AsmResolver.DotNet.Tests/MetadataResolverTest.cs index d3bc6ecac..94298169e 100644 --- a/test/AsmResolver.DotNet.Tests/MetadataResolverTest.cs +++ b/test/AsmResolver.DotNet.Tests/MetadataResolverTest.cs @@ -225,6 +225,28 @@ public void MaliciousExportedTypeLoop() } [Fact] + public void ResolveToOlderNetVersion() + { + // https://github.com/Washi1337/AsmResolver/issues/321 + + var mainApp = ModuleDefinition.FromBytes(Properties.Resources.DifferentNetVersion_MainApp); + var library = ModuleDefinition.FromBytes(Properties.Resources.DifferentNetVersion_Library); + + mainApp.MetadataResolver.AssemblyResolver.AddToCache(library.Assembly!, library.Assembly!); + + var definition = library + .TopLevelTypes.First(t => t.Name == "MyClass") + .Methods.First(m => m.Name == "ThrowMe"); + + var reference = (IMethodDescriptor) mainApp.ManagedEntrypointMethod!.CilMethodBody!.Instructions.First( + i => i.OpCode == CilOpCodes.Callvirt && ((IMethodDescriptor) i.Operand)?.Name == "ThrowMe") + .Operand!; + + var resolved = reference.Resolve(); + Assert.NotNull(resolved); + Assert.Equal(definition, resolved); + } + public void ResolveMethodWithoutHideBySig() { // https://github.com/Washi1337/AsmResolver/issues/241 diff --git a/test/AsmResolver.DotNet.Tests/Properties/Resources.Designer.cs b/test/AsmResolver.DotNet.Tests/Properties/Resources.Designer.cs index 413f1fa55..fbf27fbcb 100644 --- a/test/AsmResolver.DotNet.Tests/Properties/Resources.Designer.cs +++ b/test/AsmResolver.DotNet.Tests/Properties/Resources.Designer.cs @@ -234,6 +234,20 @@ public static byte[] FieldRvaTest { } } + public static byte[] DifferentNetVersion_MainApp { + get { + object obj = ResourceManager.GetObject("DifferentNetVersion_MainApp", resourceCulture); + return ((byte[])(obj)); + } + } + + public static byte[] DifferentNetVersion_Library { + get { + object obj = ResourceManager.GetObject("DifferentNetVersion_Library", resourceCulture); + return ((byte[])(obj)); + } + } + public static byte[] CallManagedExport_X86 { get { object obj = ResourceManager.GetObject("CallManagedExport_X86", resourceCulture); diff --git a/test/AsmResolver.DotNet.Tests/Properties/Resources.resx b/test/AsmResolver.DotNet.Tests/Properties/Resources.resx index ecc3273dd..e919e0c39 100644 --- a/test/AsmResolver.DotNet.Tests/Properties/Resources.resx +++ b/test/AsmResolver.DotNet.Tests/Properties/Resources.resx @@ -99,6 +99,12 @@ ..\Resources\FieldRvaTest.exe;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\Resources\DifferentNetVersion.MainApp.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\DifferentNetVersion.Library.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + ..\Resources\CallManagedExport.x86.exe;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 diff --git a/test/AsmResolver.DotNet.Tests/Resources/DifferentNetVersion.Library.dll b/test/AsmResolver.DotNet.Tests/Resources/DifferentNetVersion.Library.dll new file mode 100644 index 000000000..b1e05392b Binary files /dev/null and b/test/AsmResolver.DotNet.Tests/Resources/DifferentNetVersion.Library.dll differ diff --git a/test/AsmResolver.DotNet.Tests/Resources/DifferentNetVersion.MainApp.dll b/test/AsmResolver.DotNet.Tests/Resources/DifferentNetVersion.MainApp.dll new file mode 100644 index 000000000..e484ca0fd Binary files /dev/null and b/test/AsmResolver.DotNet.Tests/Resources/DifferentNetVersion.MainApp.dll differ