【问题标题】:Call function of Visual Studio PackageVisual Studio Package的调用函数
【发布时间】:2014-10-07 15:34:11
【问题描述】:

我创建了一个新的 Visual Studio 包,加载时会创建一个工具窗口,如下所示:

它由一些带有画布的控件组成,可以在 2 或 3 维中绘制形状。现在,它们在初始化步骤中工作以创建您在上面看到的对象。为了使这个工具有用,我想在这些控件上调用一个方法来传递其他对象进行绘制。例如,我正在调试一些带有点和线的代码,并希望以图形方式查看它们。 (也许使用即时窗口?或类似的东西?)我希望能够调用 GeometryVisualToolWindow.DrawObject(myCircle);

如何访问包中的公共方法并传递参数?

我不想使用调试器可视化器,因为我希望能够有选择地从场景中添加和删除对象,而调试器可视化器只会显示单个对象。 (例如,我想看看两条线是否相交等)


更新

我曾尝试使用DTE.Debugger.GetExpression 来解决问题,但在添加适当的引用后,我得到了:

【问题讨论】:

  • 你想用什么称呼他们?运行带有调试器的任意代码?
  • 几乎是的,我想象的是即时窗口。你可以看看this question。这是我真正想做的事情。但我想一次看到多个对象。在调试器可视化器中,我只会看到一个对象

标签: c# visual-studio-2012 visual-studio-extensions vspackage geometry-class-library


【解决方案1】:

我会告诉你如何在 Visual Studio 调试会话中执行任意代码。

查看自动化模型:http://i.msdn.microsoft.com/dynimg/IC75297.gif

您可以访问 DTE.Debugger 的实例,如下所述:http://msdn.microsoft.com/en-us/library/aa291845(v=vs.71).aspx(Visual Studio 调试器对象模型)。

然后你可以选择:

1) 在 VS 调试器中执行实际语句(ExecuteStatement)。这意味着您需要将所有程序集加载到特定的调试器会话中。加载的程序集需要注意添加用户可以调用的静态函数。如GeometryVisualToolWindow.DrawObject(myCircle);。该方法需要与 VSPackage 进行通信。

2) 使用 VSPackage 中的 GetExpression("myVariable.SerializeToBase64()") ,瞧,您已经序列化了 myVariable 的实例。当然,你首先需要注入这样的功能。

http://msdn.microsoft.com/en-us/library/aa291625(v=vs.71).aspx

【讨论】:

  • 不打算使用即时窗口。似乎只是一个开始的地方
  • 好吧,所有这些窗口(即时窗口、自动、本地,..)afaik 都依赖于 DTE.Debugger。您可以访问当前的堆栈帧,这意味着您可以获得所有本地人的列表,并且每个本地人都有您可以检查的表达式。问题是将表示从 VS 调试会话传输到 VS 包,因为这两者处于完全不同的上下文中。
  • 因此,如果我理解正确,我将有一个方法(假设附加到我的包窗口上的按钮)调用 DTE.Debugger.GetExpression("myVariable.LineSegments") 或类似的东西返回一些可绘制的东西,我会画那些线
  • 没错。您需要记住,您将只返回“字符串”类型的值。这不像您可以收到“实际”对象
  • 查看我对该问题的编辑。我似乎无法让 DTE.Debugger.GetExpression 工作。我得到Error: An object reference is required for the non-static field, mehtod, or property 'EnvDTE._DTE.Debugger.get'
猜你喜欢
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 2014-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-05
相关资源
最近更新 更多