Browse Source

#2657: Use the same metadata reader (same options) in all cases.

pull/2660/head
Siegfried Pammer 3 years ago
parent
commit
e05b0dcbb0
  1. 2
      ICSharpCode.Decompiler.Tests/Helpers/Tester.cs
  2. 2
      ICSharpCode.Decompiler.Tests/PdbGenerationTestRunner.cs
  3. 2
      ICSharpCode.Decompiler.Tests/RoundtripAssembly.cs
  4. 31
      ICSharpCode.Decompiler/Metadata/DotNetCorePathFinderExtensions.cs
  5. 2
      ILSpy.BamlDecompiler.Tests/BamlTestRunner.cs

2
ICSharpCode.Decompiler.Tests/Helpers/Tester.cs

@ -661,7 +661,7 @@ namespace ICSharpCode.Decompiler.Tests.Helpers @@ -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);

2
ICSharpCode.Decompiler.Tests/PdbGenerationTestRunner.cs

@ -59,7 +59,7 @@ namespace ICSharpCode.Decompiler.Tests @@ -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))
{

2
ICSharpCode.Decompiler.Tests/RoundtripAssembly.cs

@ -183,7 +183,7 @@ namespace ICSharpCode.Decompiler.Tests @@ -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(".");

31
ICSharpCode.Decompiler/Metadata/DotNetCorePathFinderExtensions.cs

@ -42,25 +42,24 @@ namespace ICSharpCode.Decompiler.Metadata @@ -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 @@ -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 @@ -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 @@ -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 @@ -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');

2
ILSpy.BamlDecompiler.Tests/BamlTestRunner.cs

@ -168,7 +168,7 @@ namespace ILSpy.BamlDecompiler.Tests @@ -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();

Loading…
Cancel
Save