Browse Source

Fix bug in WholeProjectDecompiler

pull/1198/head
Siegfried Pammer 8 years ago
parent
commit
c1d640f4b4
  1. 27
      ICSharpCode.Decompiler/CSharp/WholeProjectDecompiler.cs

27
ICSharpCode.Decompiler/CSharp/WholeProjectDecompiler.cs

@ -33,6 +33,7 @@ using System.Threading;
using System.Reflection.PortableExecutable; using System.Reflection.PortableExecutable;
using System.Reflection.Metadata; using System.Reflection.Metadata;
using static ICSharpCode.Decompiler.Metadata.DotNetCorePathFinderExtensions; using static ICSharpCode.Decompiler.Metadata.DotNetCorePathFinderExtensions;
using static ICSharpCode.Decompiler.Metadata.MetadataExtensions;
namespace ICSharpCode.Decompiler.CSharp namespace ICSharpCode.Decompiler.CSharp
{ {
@ -128,16 +129,20 @@ namespace ICSharpCode.Decompiler.CSharp
w.WriteValue(platformName); w.WriteValue(platformName);
w.WriteEndElement(); // </Platform> w.WriteEndElement(); // </Platform>
switch (module.Reader.PEHeaders.PEHeader.Subsystem) { if (module.Reader.PEHeaders.IsDll) {
case Subsystem.WindowsGui: w.WriteElementString("OutputType", "Library");
w.WriteElementString("OutputType", "WinExe"); } else {
break; switch (module.Reader.PEHeaders.PEHeader.Subsystem) {
case Subsystem.WindowsCui: case Subsystem.WindowsGui:
w.WriteElementString("OutputType", "Exe"); w.WriteElementString("OutputType", "WinExe");
break; break;
default: case Subsystem.WindowsCui:
w.WriteElementString("OutputType", "Library"); w.WriteElementString("OutputType", "Exe");
break; break;
default:
w.WriteElementString("OutputType", "Library");
break;
}
} }
w.WriteElementString("AssemblyName", module.Name); w.WriteElementString("AssemblyName", module.Name);
@ -296,7 +301,7 @@ namespace ICSharpCode.Decompiler.CSharp
IEnumerable<Tuple<string, string>> WriteCodeFilesInProject(Metadata.PEFile module, CancellationToken cancellationToken) IEnumerable<Tuple<string, string>> WriteCodeFilesInProject(Metadata.PEFile module, CancellationToken cancellationToken)
{ {
var metadata = module.GetMetadataReader(); 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) { delegate (TypeDefinitionHandle h) {
var type = metadata.GetTypeDefinition(h); var type = metadata.GetTypeDefinition(h);
string file = CleanUpFileName(metadata.GetString(type.Name)) + ".cs"; string file = CleanUpFileName(metadata.GetString(type.Name)) + ".cs";

Loading…
Cancel
Save