Skip to content

Commit 5625db2

Browse files
committed
Refine GeneratePdbForAssemblies implementation.
1 parent e807f1a commit 5625db2

File tree

3 files changed

+27
-13
lines changed

3 files changed

+27
-13
lines changed

ILSpy/Commands/GeneratePdbContextMenuEntry.cs

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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++;

ILSpy/Properties/Resources.resx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ Are you sure you want to continue?</value>
175175
<value>Entity could not be resolved. Cannot analyze entities from missing assembly references. Add the missing reference and try again.</value>
176176
</data>
177177
<data name="CannotCreatePDBFile" xml:space="preserve">
178-
<value>Cannot create PDB file for {0}, because it does not contain a PE Debug Directory Entry of type 'CodeView'.</value>
178+
<value>Cannot create PDB file for {0} because the PE debug directory type 'CodeView' is missing.</value>
179179
</data>
180180
<data name="CheckAgain" xml:space="preserve">
181181
<value>Check again</value>

ILSpy/Properties/Resources.zh-Hans.resx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@
176176
<value>无法解析实体。可能是由于缺少程序集引用。请添加缺少的程序集并重试。</value>
177177
</data>
178178
<data name="CannotCreatePDBFile" xml:space="preserve">
179-
<value>无法创建为{0}创建PDB文件,因为它不包含PE调试目录类型 'CodeView'.</value>
179+
<value>不能为 {0} 创建PDB文件,因为缺少PE调试目录类型 'CodeView'</value>
180180
</data>
181181
<data name="CheckAgain" xml:space="preserve">
182182
<value>再次检查</value>

0 commit comments

Comments
 (0)