From c1d640f4b4f2ec0eb30aabe964b6414c9972bb93 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Fri, 6 Apr 2018 16:24:45 +0200 Subject: [PATCH] Fix bug in WholeProjectDecompiler --- .../CSharp/WholeProjectDecompiler.cs | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/ICSharpCode.Decompiler/CSharp/WholeProjectDecompiler.cs b/ICSharpCode.Decompiler/CSharp/WholeProjectDecompiler.cs index 7070faa53..d56182976 100644 --- a/ICSharpCode.Decompiler/CSharp/WholeProjectDecompiler.cs +++ b/ICSharpCode.Decompiler/CSharp/WholeProjectDecompiler.cs @@ -33,6 +33,7 @@ using System.Threading; using System.Reflection.PortableExecutable; using System.Reflection.Metadata; using static ICSharpCode.Decompiler.Metadata.DotNetCorePathFinderExtensions; +using static ICSharpCode.Decompiler.Metadata.MetadataExtensions; namespace ICSharpCode.Decompiler.CSharp { @@ -128,16 +129,20 @@ namespace ICSharpCode.Decompiler.CSharp w.WriteValue(platformName); w.WriteEndElement(); // - switch (module.Reader.PEHeaders.PEHeader.Subsystem) { - case Subsystem.WindowsGui: - w.WriteElementString("OutputType", "WinExe"); - break; - case Subsystem.WindowsCui: - w.WriteElementString("OutputType", "Exe"); - break; - default: - w.WriteElementString("OutputType", "Library"); - break; + if (module.Reader.PEHeaders.IsDll) { + w.WriteElementString("OutputType", "Library"); + } else { + switch (module.Reader.PEHeaders.PEHeader.Subsystem) { + case Subsystem.WindowsGui: + w.WriteElementString("OutputType", "WinExe"); + break; + case Subsystem.WindowsCui: + w.WriteElementString("OutputType", "Exe"); + break; + default: + w.WriteElementString("OutputType", "Library"); + break; + } } w.WriteElementString("AssemblyName", module.Name); @@ -296,7 +301,7 @@ namespace ICSharpCode.Decompiler.CSharp IEnumerable> WriteCodeFilesInProject(Metadata.PEFile module, CancellationToken cancellationToken) { var metadata = module.GetMetadataReader(); - var files = module.GetMetadataReader().TypeDefinitions.Where(td => IncludeTypeWhenDecompilingProject(module, td)).GroupBy( + var files = module.GetMetadataReader().GetTopLevelTypeDefinitions().Where(td => IncludeTypeWhenDecompilingProject(module, td)).GroupBy( delegate (TypeDefinitionHandle h) { var type = metadata.GetTypeDefinition(h); string file = CleanUpFileName(metadata.GetString(type.Name)) + ".cs";