Skip to content

Commit

Permalink
icsharpcode#2657: Use the same metadata reader (same options) in all …
Browse files Browse the repository at this point in the history
…cases.
  • Loading branch information
siegfriedpammer committed Mar 22, 2022
1 parent 0b11050 commit e05b0dc
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 20 deletions.
2 changes: 1 addition & 1 deletion ICSharpCode.Decompiler.Tests/Helpers/Tester.cs
Original file line number Diff line number Diff line change
Expand Up @@ -661,7 +661,7 @@ public static Task<string> DecompileCSharp(string assemblyFileName, DecompilerSe
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);
Expand Down
2 changes: 1 addition & 1 deletion ICSharpCode.Decompiler.Tests/PdbGenerationTestRunner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ private void TestGeneratePdb([CallerMemberName] string testName = null)
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))
{
Expand Down
2 changes: 1 addition & 1 deletion ICSharpCode.Decompiler.Tests/RoundtripAssembly.cs
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ async Task RunInternal(string dir, string fileToRoundtrip, Action<string> testAc
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(".");

Expand Down
31 changes: 15 additions & 16 deletions ICSharpCode.Decompiler/Metadata/DotNetCorePathFinderExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,25 +42,24 @@ public static class DotNetCorePathFinderExtensions

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(" ", "");
Expand All @@ -72,9 +71,9 @@ public static string DetectTargetFrameworkId(this PEReader assembly, string asse
}
}

if (reader.IsAssembly)
if (metadata.IsAssembly)
{
var thisAssemblyName = reader.GetAssemblyDefinition().GetAssemblyName();
var thisAssemblyName = metadata.GetAssemblyDefinition().GetAssemblyName();
switch (thisAssemblyName.Name)
{
case "mscorlib":
Expand All @@ -84,15 +83,15 @@ public static string DetectTargetFrameworkId(this PEReader assembly, string asse
}
}

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);
Expand Down Expand Up @@ -148,7 +147,7 @@ public static string DetectTargetFrameworkId(this PEReader assembly, string asse
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');
Expand All @@ -168,7 +167,7 @@ public static string DetectTargetFrameworkId(this PEReader assembly, string asse
}
else
{
version = reader.MetadataVersion;
version = metadata.MetadataVersion;
if (string.IsNullOrEmpty(version))
version = "4.0";
version = version.TrimStart('v');
Expand Down
2 changes: 1 addition & 1 deletion ILSpy.BamlDecompiler.Tests/BamlTestRunner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ void RunTest(string name, string asmPath, string sourcePath)
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();
Expand Down

0 comments on commit e05b0dc

Please sign in to comment.