5

这个问题的相关性超出了我自己的情况,因为任何拥有本地化应用程序并且必须交付独立 EXE 的人都会遇到这个问题——他们会想要使用 ILMerge(或 Costura 或一些自制解决方案)来放置本地化 DLL(或任何其他程序集) ) 到他们的 EXE 中——但是一旦他们这样做了,他们就不能再调试他们的代码了。VS 调试器将拒绝接受为原始 EXE 生成的原始 PDB 文件,可能是因为 ILMerge 步骤更新校验和或更改 GUID。

我想知道是否有任何方法可以解决这个问题.. 可能像一些鲜为人知的 ILMerge 选项?在我看来,这是一种非常常见且不必要的调试能力损失。

我相信在本地化之后调试此类应用程序的唯一其他方法是维护一个使用 DLL un-ILMerged 的​​并行构建选项,这很好,除非您碰巧想要调试本地化代码本身(例如,我)。 .那你真的不走运了。谁能想到其他选择?

我也尝试使用 Costura,但由于本地化 DLL 都包含同名的资源(并且与主资源 AppName.resource 相同),因此您只能将一个这样的 DLL 添加到引用中:不允许后续的 DLL。有什么方法可以让 Costura 工作吗?(如果它可以工作,可能不会出现 PDB 问题,因为该组合是 Visual Studio 构建的一部分......?)

编辑:我正在寻找导致 PDB/EXE 匹配的想法。我意识到您可以在十六进制编辑器中破解 pdb。不过,该问题专门询问了如何使系统按预期工作。

4

2 回答 2

1

ILMerge 还将生成合并的 pdb。您是否关闭了此选项,或者合并的 pdb 也不适合您?

于 2012-11-03T02:08:57.540 回答
0

PDB 文件和 EXE 都有一个 GUID。如果 GUID 不匹配,则调试器将拒绝加载 PDB 文件。如果您手动编辑两个文件之一以使 GUID 匹配,则将加载 PDB 文件。这可能会导致反汇编中的符号信息不正确。

于 2012-10-12T19:55:53.560 回答