如何使用Visual Studio“即时窗口”调用外部程序集方法?

时间:2018-10-02 20:28:36

标签: c# debugging visual-studio-2017 visual-studio-extensions immediate-window

如何部署程序集,以便可以从“即时窗口” 调用实用程序库中的方法,而不必将解决方案项目引用添加到MyCompany.DebuggingTools.dll

上下文

我已经编写了一个实用程序库(简称为MyCompany.DebuggingTools.dll),其中包括一些在开发过程中调试应用程序有用的方法。

理想情况下,我希望能够:

  1. 使用“立即窗口” 调用实用程序库中的方法
    • 这暗示 Visual Studio 调试器将附加到被测应用程序上
  2. 正在测试的应用程序不会具有对MyCompany.DebuggingTools.dll的任何解决方案项目引用
    • 本质上,我正在尝试扩展“即时窗口” 的功能。

更多信息

  • Visual Studio 2017
  • Windows 10
  • 该项目...
    • 是一个简单的C#类库
    • 已使用 Visual Studio
    • 生成的密钥文件签名
  • 场景:
    1. MyCompany.DebuggingTools.dll被添加为对被测项目的引用
      • 我可以从“立即窗口” 调用工具库。可以。
      • 受测项目不应引用工具集。
    2. MyCompany.DebuggingTools.dll尚未添加为项目参考
      • 当我尝试从“即时窗口” 调用其中一种工具时,出现以下错误:
        • error CS0246: The type or namespace name 'MyCompany' could not be found (are you missing a using directive or an assembly reference?)

1 个答案:

答案 0 :(得分:1)

我一直在寻找类似的东西-这是一个完整而完全的破解,但是可以在 Visual Studio 2017 立即窗口中使用,如果您将其用于特别讨厌的调试中,则可能值得这样做会话:

dynamic xx = System.Activator.CreateInstance(System.Reflection.Assembly.LoadFile(@"C:\dev\ImmediateWindowHelpers.dll").GetType("FullyQualifiedNamespace.Helpers"));

其中Helpers类是非静态的地方。现在,我可以在其上调用方法了:

xx.PrintParameters(sqlParameterList);

因为它将返回一个字符串,所以它将仅显示在立即窗口中。我对此进行了测试,它对我有用。同样,该实例仅在调试会话中有效,并且每次都需要加载。习惯之后,这没什么大不了的,它只是一行。

我可以想象某种形式的Visual Studio扩展会更理想,它可以在调试时为您加载程序集,或者在程序集包含构建时将其加载到程序包中。应用程序域?我从没研究过这些东西,但是如果您花费大量时间进行调试,这似乎是值得的。