gpt4 book ai didi

debugging - 如何调试 ILMerged 程序集?

转载 作者:行者123 更新时间:2023-12-03 06:49:35 25 4
gpt4 key购买 nike

摘要

我想更改 2 程序集解决方案的构建过程,以便调用 ILMerge,并且生成单个程序集的结果。此外,我希望能够调试生成的程序集。

准备 - 一个简单的示例

  1. 新解决方案 - ClassLibrary1
  2. 在 Class1 中创建一个静态函数“GetMessage”,返回字符串“Hello world”
  3. 创建引用 ClassLibrary 的新控制台应用。
  4. 通过控制台从 main() 输出 GetMessage。

您现在有一个 2 程序集应用程序,它将“Hello World”输出到控制台。

那么接下来......?

我想更改控制台应用程序构建过程,包括使用 ILMerge 的后期构建步骤,将 ClassLibrary 程序集合并到控制台程序集中

完成这一步后,我应该能够:

  • 在不存在 ClassLibrary1.dll 的情况下直接运行控制台应用
  • 通过 VS 中的 F5(或 F11)运行控制台应用,并能够调试这 2 个项目中的每一个项目。

成功有限

我读到this blogpost并设法通过构建后命令实现了我想要的合并...

"$(ProjectDir)ILMerge.bat" "$(TargetDir)" $(ProjectName)

...以及一个 ILMerge.bat 文件,其中读取...

CD %1
Copy %2.exe temp.exe
ILMerge.exe /out:%2.exe temp.exe ClassLibrary1.dll
Del temp.exe
Del ClassLibrary1.*

这工作得相当好,并且实际上生成了一个可以根据需要在 VS 环境之外运行的 exe。然而,它似乎没有生成 VS 能够使用的符号(.pdb 文件)来调试代码。

我认为这是拼图的最后一 block 。

有谁知道我怎样才能做到这一点?

FWIW我在 x64 Win7 x64 机器上运行 VS2010。

更新:为什么我要这样做?

有人问:“在调试场景中我真的需要 ILMerge 吗?”

我的解决方案的程序集需要与其他解决方案(我可能会开发其中一些)的程序集共存于同一文件夹中

其中一些解决方案将共享对某些程序集的不同版本的依赖关系。

因此,Solution1 可能由 Console1 和 ClassLibrary1.dll(v1) 组成,Solution2 可能由 Console2 和 Classlibrary1.dll(v2) 组成。

我认为我可以将依赖项的正确版本合并到解决方案的主程序集中以避免冲突,而不是在 GAC 中注册所有内容。

但是,目前这使得调试该解决方案变得不可能,我需要与将出现的其他解决方案结合起来进行调试。

这听起来很复杂吗?那是因为它是..:D

最佳答案

很抱歉您遇到了问题。我没有按照您的具体步骤操作,但我创建了一个控制台应用程序 A.exe,它调用 dll B.dll 中的方法。我在 Debug模式下构建了两个程序集(以便它们具有 PDB 文件)。然后我像这样合并它们:

ilmerge /out:foo.exe A.exe B.dll

(实际上A和B在另一个目录中,所以我的命令行有点复杂,但这应该没有什么区别。)ILMerge完成后,当前目录中有两个文件:foo.exe和foo .pdb。然后我输入:

devenv foo.exe

这将打开 Visual Studio,然后我按“F10”启动调试器。我能够单步执行可执行文件中的 Main 方法,然后使用“F11”单步执行原本位于 B.dll 中的方法。调试体验与使用两个程序集的原始 Visual Studio 解决方案中的调试体验完全相同。

如果您仍然遇到问题,请随时将整个解决方案放入 zip 文件中并将其发送给我(mbarnett at microsoft dot com)和我可以尝试一下。

关于debugging - 如何调试 ILMerged 程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3064741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com