Ror*_*ker 8 debugging ilmerge symbols visual-studio-2010
摘要
我想改变2程序集解决方案的构建过程,以便调用ILMerge,并且构建会产生单个程序集.此外,我希望能够调试到最终的程序集.
准备 - 一个简单的例子
您现在有一个2组装应用程序,它将"Hello World"输出到控制台.
那么下一步..?
我想改变Console应用程序构建过程,包括使用ILMerge的post构建步骤,将ClassLibrary程序集合并到Console程序集中
在这一步之后,我应该能够:
成功有限
我阅读了这篇博文,并设法实现了我之后使用后期构建命令进行的合并...
"$(ProjectDir)ILMerge.bat" "$(TargetDir)" $(ProjectName)
Run Code Online (Sandbox Code Playgroud)
...和一个读取的ILMerge.bat文件......
CD %1
Copy %2.exe temp.exe
ILMerge.exe /out:%2.exe temp.exe ClassLibrary1.dll
Del temp.exe
Del ClassLibrary1.*
Run Code Online (Sandbox Code Playgroud)
这样可以很好地工作,并且实际上产生了一个在VS环境之外运行的exe.但是,它似乎不会产生VS能够用于调试代码的符号(.pdb文件).
我认为这是拼图的最后一块.
有谁知道我怎么能做这个工作?
FWIW我在x64 Win7 x64机器上运行VS2010.
更新:我为什么要这样做?
有人问:'在调试场景中我真的需要ILMerge吗?'
我的解决方案的程序集需要与其他解决方案(其中一些我可能会开发)共存于同一文件夹中
其中一些解决方案将共享某些程序集的不同版本的依赖关系.
因此,Solution1可能由Console1和ClassLibrary1.dll(v1)组成,而Solution2可能由Console2和Classlibrary1.dll(v2)组成.
我没有在GAC中注册所有内容,而是认为我可以将正确版本的依赖项ILMerge到解决方案的主要程序集中以避免冲突.
然而,这目前使得无法调试解决方案,我需要将其与将要出现的其他解决方案结合使用.
这听起来很复杂吗?那是因为它是......:D
小智 5
很抱歉你遇到了问题。我没有按照您的具体步骤操作,但是我创建了一个控制台应用程序 A.exe,它在 dll 中调用了一个方法 B.dll。我在调试模式下构建了两个程序集(以便它们具有 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在微软点COM),我可以尝试一下。
归档时间: |
|
查看次数: |
2790 次 |
最近记录: |