From e05b0dcbb02b0a180ec8c77c85b522cf2a3f9d38 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Tue, 22 Mar 2022 08:06:20 +0100 Subject: [PATCH] #2657: Use the same metadata reader (same options) in all cases. --- .../Helpers/Tester.cs | 2 +- .../PdbGenerationTestRunner.cs | 2 +- .../RoundtripAssembly.cs | 2 +- .../DotNetCorePathFinderExtensions.cs | 31 +++++++++---------- ILSpy.BamlDecompiler.Tests/BamlTestRunner.cs | 2 +- 5 files changed, 19 insertions(+), 20 deletions(-) diff --git a/ICSharpCode.Decompiler.Tests/Helpers/Tester.cs b/ICSharpCode.Decompiler.Tests/Helpers/Tester.cs index dc67938d7..8167fc1ab 100644 --- a/ICSharpCode.Decompiler.Tests/Helpers/Tester.cs +++ b/ICSharpCode.Decompiler.Tests/Helpers/Tester.cs @@ -661,7 +661,7 @@ namespace ICSharpCode.Decompiler.Tests.Helpers using (var file = new FileStream(assemblyFileName, FileMode.Open, FileAccess.Read)) { var module = new PEFile(assemblyFileName, file, PEStreamOptions.PrefetchEntireImage); - string targetFramework = module.Reader.DetectTargetFrameworkId(); + string targetFramework = module.Metadata.DetectTargetFrameworkId(); var resolver = new UniversalAssemblyResolver(assemblyFileName, false, targetFramework, null, PEStreamOptions.PrefetchMetadata); resolver.AddSearchDirectory(targetFramework.Contains(".NETFramework") ? RefAsmPath : coreRefAsmPath); diff --git a/ICSharpCode.Decompiler.Tests/PdbGenerationTestRunner.cs b/ICSharpCode.Decompiler.Tests/PdbGenerationTestRunner.cs index 50a365c6e..35f1eede4 100644 --- a/ICSharpCode.Decompiler.Tests/PdbGenerationTestRunner.cs +++ b/ICSharpCode.Decompiler.Tests/PdbGenerationTestRunner.cs @@ -59,7 +59,7 @@ namespace ICSharpCode.Decompiler.Tests string peFileName = Path.Combine(TestCasePath, testName + ".expected.dll"); string pdbFileName = Path.Combine(TestCasePath, testName + ".expected.pdb"); var moduleDefinition = new PEFile(peFileName); - var resolver = new UniversalAssemblyResolver(peFileName, false, moduleDefinition.Reader.DetectTargetFrameworkId(), null, PEStreamOptions.PrefetchEntireImage); + var resolver = new UniversalAssemblyResolver(peFileName, false, moduleDefinition.Metadata.DetectTargetFrameworkId(), null, PEStreamOptions.PrefetchEntireImage); var decompiler = new CSharpDecompiler(moduleDefinition, resolver, new DecompilerSettings()); using (FileStream pdbStream = File.Open(Path.Combine(TestCasePath, testName + ".pdb"), FileMode.OpenOrCreate, FileAccess.ReadWrite)) { diff --git a/ICSharpCode.Decompiler.Tests/RoundtripAssembly.cs b/ICSharpCode.Decompiler.Tests/RoundtripAssembly.cs index f4b0037f9..3a378e237 100644 --- a/ICSharpCode.Decompiler.Tests/RoundtripAssembly.cs +++ b/ICSharpCode.Decompiler.Tests/RoundtripAssembly.cs @@ -183,7 +183,7 @@ namespace ICSharpCode.Decompiler.Tests using (var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read)) { PEFile module = new PEFile(file, fileStream, PEStreamOptions.PrefetchEntireImage); - var resolver = new TestAssemblyResolver(file, inputDir, module.Reader.DetectTargetFrameworkId()); + var resolver = new TestAssemblyResolver(file, inputDir, module.Metadata.DetectTargetFrameworkId()); resolver.AddSearchDirectory(inputDir); resolver.RemoveSearchDirectory("."); diff --git a/ICSharpCode.Decompiler/Metadata/DotNetCorePathFinderExtensions.cs b/ICSharpCode.Decompiler/Metadata/DotNetCorePathFinderExtensions.cs index 088d673d1..e391ab1e2 100644 --- a/ICSharpCode.Decompiler/Metadata/DotNetCorePathFinderExtensions.cs +++ b/ICSharpCode.Decompiler/Metadata/DotNetCorePathFinderExtensions.cs @@ -42,25 +42,24 @@ namespace ICSharpCode.Decompiler.Metadata public static string DetectTargetFrameworkId(this PEFile assembly) { - return DetectTargetFrameworkId(assembly.Reader, assembly.FileName); + return DetectTargetFrameworkId(assembly.Metadata, assembly.FileName); } - public static string DetectTargetFrameworkId(this PEReader assembly, string assemblyPath = null) + public static string DetectTargetFrameworkId(this MetadataReader metadata, string assemblyPath = null) { - if (assembly == null) - throw new ArgumentNullException(nameof(assembly)); + if (metadata == null) + throw new ArgumentNullException(nameof(metadata)); const string TargetFrameworkAttributeName = "System.Runtime.Versioning.TargetFrameworkAttribute"; - var reader = assembly.GetMetadataReader(); - foreach (var h in reader.GetCustomAttributes(Handle.AssemblyDefinition)) + foreach (var h in metadata.GetCustomAttributes(Handle.AssemblyDefinition)) { try { - var attribute = reader.GetCustomAttribute(h); - if (attribute.GetAttributeType(reader).GetFullTypeName(reader).ToString() != TargetFrameworkAttributeName) + var attribute = metadata.GetCustomAttribute(h); + if (attribute.GetAttributeType(metadata).GetFullTypeName(metadata).ToString() != TargetFrameworkAttributeName) continue; - var blobReader = reader.GetBlobReader(attribute.Value); + var blobReader = metadata.GetBlobReader(attribute.Value); if (blobReader.ReadUInt16() == 0x0001) { return blobReader.ReadSerializedString()?.Replace(" ", ""); @@ -72,9 +71,9 @@ namespace ICSharpCode.Decompiler.Metadata } } - if (reader.IsAssembly) + if (metadata.IsAssembly) { - var thisAssemblyName = reader.GetAssemblyDefinition().GetAssemblyName(); + var thisAssemblyName = metadata.GetAssemblyDefinition().GetAssemblyName(); switch (thisAssemblyName.Name) { case "mscorlib": @@ -84,15 +83,15 @@ namespace ICSharpCode.Decompiler.Metadata } } - foreach (var h in reader.AssemblyReferences) + foreach (var h in metadata.AssemblyReferences) { try { - var r = reader.GetAssemblyReference(h); + var r = metadata.GetAssemblyReference(h); if (r.PublicKeyOrToken.IsNil) continue; string version; - switch (reader.GetString(r.Name)) + switch (metadata.GetString(r.Name)) { case "netstandard": version = r.Version.ToString(2); @@ -148,7 +147,7 @@ namespace ICSharpCode.Decompiler.Metadata var type = pathMatch.Groups["type"].Value; version = pathMatch.Groups["version"].Value; if (string.IsNullOrEmpty(version)) - version = reader.MetadataVersion; + version = metadata.MetadataVersion; if (string.IsNullOrEmpty(version)) version = "4.0"; version = version.TrimStart('v'); @@ -168,7 +167,7 @@ namespace ICSharpCode.Decompiler.Metadata } else { - version = reader.MetadataVersion; + version = metadata.MetadataVersion; if (string.IsNullOrEmpty(version)) version = "4.0"; version = version.TrimStart('v'); diff --git a/ILSpy.BamlDecompiler.Tests/BamlTestRunner.cs b/ILSpy.BamlDecompiler.Tests/BamlTestRunner.cs index a7463895e..5c68179f1 100644 --- a/ILSpy.BamlDecompiler.Tests/BamlTestRunner.cs +++ b/ILSpy.BamlDecompiler.Tests/BamlTestRunner.cs @@ -168,7 +168,7 @@ namespace ILSpy.BamlDecompiler.Tests using (var fileStream = new FileStream(asmPath, FileMode.Open, FileAccess.Read)) { var module = new PEFile(asmPath, fileStream); - var resolver = new UniversalAssemblyResolver(asmPath, false, module.Reader.DetectTargetFrameworkId()); + var resolver = new UniversalAssemblyResolver(asmPath, false, module.Metadata.DetectTargetFrameworkId()); resolver.RemoveSearchDirectory("."); resolver.AddSearchDirectory(Path.GetDirectoryName(asmPath)); var res = module.Resources.First();