From 22799ca6b17b62bdc8f8c0ee38cfdd8d7bfb7e3e Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Thu, 5 Mar 2020 12:03:36 +0100 Subject: [PATCH] #1942: Make sure to group all types by filename in the generated PDB. --- .../DebugInfo/PortablePdbWriter.cs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/ICSharpCode.Decompiler/DebugInfo/PortablePdbWriter.cs b/ICSharpCode.Decompiler/DebugInfo/PortablePdbWriter.cs index 7a2ae24cd..2c26d81cc 100644 --- a/ICSharpCode.Decompiler/DebugInfo/PortablePdbWriter.cs +++ b/ICSharpCode.Decompiler/DebugInfo/PortablePdbWriter.cs @@ -62,11 +62,15 @@ namespace ICSharpCode.Decompiler.DebugInfo var customMethodDebugInfo = new List<(MethodDefinitionHandle Parent, GuidHandle Guid, BlobHandle Blob)>(); var globalImportScope = metadata.AddImportScope(default, default); - foreach (var handle in reader.GetTopLevelTypeDefinitions()) { - var type = reader.GetTypeDefinition(handle); + string BuildFileNameFromTypeName(TypeDefinitionHandle handle) + { + var typeName = handle.GetFullTypeName(reader).TopLevelTypeName; + return Path.Combine(WholeProjectDecompiler.CleanUpFileName(typeName.Namespace), WholeProjectDecompiler.CleanUpFileName(typeName.Name) + ".cs"); + } + foreach (var sourceFile in reader.GetTopLevelTypeDefinitions().GroupBy(BuildFileNameFromTypeName)) { // Generate syntax tree - var syntaxTree = decompiler.DecompileTypes(new[] { handle }); + var syntaxTree = decompiler.DecompileTypes(sourceFile); if (!syntaxTree.HasChildren) continue; @@ -84,8 +88,7 @@ namespace ICSharpCode.Decompiler.DebugInfo lock (metadata) { var sourceBlob = WriteSourceToBlob(metadata, sourceText, out var sourceCheckSum); - var typeName = type.GetFullTypeName(reader).TopLevelTypeName; - var name = metadata.GetOrAddDocumentName(Path.Combine(WholeProjectDecompiler.CleanUpFileName(typeName.Namespace), WholeProjectDecompiler.CleanUpFileName(typeName.Name) + ".cs")); + var name = metadata.GetOrAddDocumentName(sourceFile.Key); // Create Document(Handle) var document = metadata.AddDocument(name,