是否可以让 visual studio 扩展程序访问打开的解决方案的对象?

Is it possible to let visual studio extension access the objects of opened solution?

我想做一个扩展,它将循环访问实际打开的项目的 WPF 或 Windows 表单控件(或任何对象)。是否可以扩展 access/get 那个 solution/project 的对象?

Is it possible for extension to access/get the objects of that solution/project?

是的!你有几个选择。

1。托管包框架

该名称具有误导性,但这个最初的 Microsoft Codeplex 项目(现在 available on NuGet)允许您创建像这样简单的东西:

  • 菜单项;工具栏按钮; windows 和窗格

...或某些 mind-blowingly 复杂的东西,例如:

  • 类似于 ReSharper 或
  • 的东西
  • 甚至创造你自己的语言

文档很糟糕。最好的办法是查看 Python MPF 示例的 Microsoft 源代码。

MPF 可让您在键入或注视代码时 实时 以漂亮的对象层次结构迭代 VS 解决方案中的所有内容。

2。 T4 模板

您甚至不需要留下您当前的密码。 VS 项目中的 T4 模板只能在编译时 查询解决方案中的项目。

T4 模板在代码片段与模板内容交错的方式上类似于 Razor 语法。事实上,T4 被用于 ASP.NET MVC Razor 中,但外人并不知道。由于后者的学习曲线陡峭,您可能会在 MPF 之前使用 运行 T4 语法。

不幸的是,T4 已准备好执行代码生成,所以如果您只想枚举项目,那有点令人沮丧。