【发布时间】:2023-03-12 15:43:02
【问题描述】:
好的,在解决了如何在运行时在正在运行的应用程序中热加载 DLL 之后(请参阅我的 previous post),我注意到在新加载的 DLL 中插入的断点没有被命中。
情况
我有一个服务器应用程序,我希望避免在每次更改动态加载的 DLL(通过反射)时终止/重新运行
目标
这是我正在尝试做的事情(我知道这本身可能是不可能的):
- 运行 Application.exe
- 在newAppDomain中加载Process.dll并运行Process
- 调试Process.dll
- 卸载Process.dll
- 编辑进程代码,重新编译Process.dll
- 在 Application.exe 中动态地重新加载它
- 调试Process.dll
- 等等……
问题
我注意到,当 Application.exe 在调试模式下启动时,附加到 Application.exe 的调试器无法访问从另一个 AppDomain 加载的代码
(我想如果我只是直接从可执行文件启动 Application.exe,就无法让 VS 调试器调试任何东西,包括新加载的 DLL)
可能的解决方法
一种解决方法(丑陋)的解决方案是将 DLL 的“注入”分离到正在运行的应用程序中的单独可执行文件中,然后可由 VS 调试器监控
我必须承认我有点困惑。 有什么高效、干净的想法吗?
【问题讨论】:
-
这很奇怪。我有一个将应用程序加载到辅助应用程序域的应用程序服务器,并且设置断点没有问题。 Process.dll 文件是您用来启动 Application.exe 的解决方案的类项目的输出吗?
-
在您引用的问题中听起来您还没有解决卸载程序集的问题。在这种情况下,您的代码不会中断,因为调试符号不匹配。
-
可能是您的应用程序加载 dll 的位置不是在调试模式下构建 dll 的位置
标签: c# .net visual-studio