@@ -125,9 +125,30 @@ internal static void GeneratePdbForAssemblies(IEnumerable<LoadedAssembly> assemb
125125 return ;
126126
127127 // Ensure at least one assembly supports PDB generation
128- if ( ! assemblyArray . Any ( a => PortablePdbWriter . HasCodeViewDebugDirectoryEntry ( a . GetMetadataFileOrNull ( ) as PEFile ) ) )
128+ var supported = new Dictionary < LoadedAssembly , PEFile > ( ) ;
129+ var unsupported = new List < LoadedAssembly > ( ) ;
130+ foreach ( var a in assemblyArray )
129131 {
130- MessageBox . Show ( Resources . CannotCreatePDBFile ) ;
132+ try
133+ {
134+ var file = a . GetMetadataFileOrNull ( ) as PEFile ;
135+ if ( PortablePdbWriter . HasCodeViewDebugDirectoryEntry ( file ) )
136+ supported . Add ( a , file ) ;
137+ else
138+ unsupported . Add ( a ) ;
139+ }
140+ catch
141+ {
142+ unsupported . Add ( a ) ;
143+ }
144+ }
145+ if ( supported . Count == 0 )
146+ {
147+ // none can be generated
148+ string msg = string . Format ( Resources . CannotCreatePDBFile , ":" + Environment . NewLine +
149+ string . Join ( Environment . NewLine , unsupported . Select ( u => Path . GetFileName ( u . FileName ) ) )
150+ + Environment . NewLine ) ;
151+ MessageBox . Show ( msg ) ;
131152 return ;
132153 }
133154
@@ -154,15 +175,8 @@ internal static void GeneratePdbForAssemblies(IEnumerable<LoadedAssembly> assemb
154175 int processed = 0 ;
155176 foreach ( var assembly in assemblyArray )
156177 {
157- if ( ct . IsCancellationRequested )
158- {
159- output . WriteLine ( ) ;
160- output . WriteLine ( Resources . GenerationWasCancelled ) ;
161- throw new OperationCanceledException ( ct ) ;
162- }
163-
164- var file = assembly . GetMetadataFileOrNull ( ) as PEFile ;
165- if ( file == null || ! PortablePdbWriter . HasCodeViewDebugDirectoryEntry ( file ) )
178+ // only process supported assemblies
179+ if ( ! supported . TryGetValue ( assembly , out var file ) )
166180 {
167181 output . WriteLine ( string . Format ( Resources . CannotCreatePDBFile , Path . GetFileName ( assembly . FileName ) ) ) ;
168182 processed ++ ;
0 commit comments