【问题标题】:Is it possible to reload a debug assembly and re-attach to process?是否可以重新加载调试程序集并重新附加到进程?
【发布时间】:2011-04-25 03:08:00
【问题描述】:

如果我附加到应用程序的进程并进行调试,然后停止调试并重新编译依赖程序集,是否可以向我的应用程序添加逻辑,该逻辑对该程序集执行卸载/重新加载,以便我能够重新附加到进程并再次调试而不重新启动?

【问题讨论】:

    标签: c# debugging visual-studio-2010 remote-debugging


    【解决方案1】:

    我想从技术上讲,如果您的代码被编写为动态加载程序集(如插件程序集),那么它可能是可行的,但即便如此,它也只有在没有使用程序集的类/资源时才有效。因此,出于所有实际目的,不:您启动的就是您正在运行的。

    也就是说,您尝试的操作听起来与 Visual Studio 中的编辑并继续操作非常接近。你试过吗?为什么首先需要重新编译程序集?

    【讨论】:

    • 我的程序集在一个单独的编译 dll 中。这就是你说的插件的意思吗?
    • 否 - 您的 DLL 可能会被单独编译,但如果您的 C# 应用程序直接引用它,那么您将无法在运行时卸载它。但是,如果您的代码在运行时显式加载 DLL(例如,使用 Assembly.Load),那么您可以想象卸载它并重新加载不同的版本 - 但您将无法维护 DLL 中任何类的实例。不过,您实际上要解决的问题是什么?
    • 我不想重新启动的应用程序是一个测试工具,它的 GUI 不会保留任何状态。它执行的集成服务之一(来自单独的 DLL)调用 COM 互操作库,该库反过来调用流行的桌面会计软件中的例程,该软件具有明确授权我的测试应用程序连接的配置 - 但是,我怀疑这是相关的VS2010调试器的工作方式,在正常调试模式下无法识别应用程序并拒绝连接,但如果我正常启动它并连接到进程,我很好。
    【解决方案2】:

    你可以试试Shadow Copy Cache。 我从它在 NUnit 中的使用中知道它,您可以在其中更改您的测试\测试代码而无需重新启动 NUnit GUI。

    【讨论】:

      猜你喜欢
      • 2014-10-11
      • 2010-12-20
      • 2016-09-20
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      相关资源
      最近更新 更多