在现代软件开发中,Visual Studio是一个强大的集成开发环境(IDE),它支持多种编程语言和框架。随着.NET和Visual Studio的不断更新,开发插件变得更加容易。本文旨在提供一个框架,用于构建简单的Visual Studio插件,并提供一些使用C#接口和COM操作代码和项目文件的示例。
插件的核心是AddInWorker
类,它负责将一组相关命令添加到工具菜单中。另一个类CommandStruct
则封装了菜单项的名称、图标和调用委托。设计的初衷是多个菜单项需要访问实例的共享数据,例如显示偏好设置表单,或者以多种方式运行类似的相关操作。
为了进行测试,需要在Visual Studio的插件文件夹中添加一个指向.dll文件的快捷方式。Visual Studio在创建新的插件解决方案时会自动生成这个文件。使用提供的示例代码时,需要编辑并移动快捷方式文件到正确的位置。
以作者系统上的Visual Studio为例,路径为:
C:\Documents and Settings\prb\My Documents\Visual Studio2010\Addins\
有一个文件:MSVSAddIn - For Testing.AddIn
文件中的一行:
C:\Documents and Settings\prb\Desktop\MSVSAddIn\MSVSAddIn\bin\MSVSAddIn.dll
指向正在测试的.dll文件,或者在准备部署时指向最终的.dll文件。
XML配置文件示例:
MicrosoftVisual StudioMacros
10.0
Microsoft Visual Studio
10.0
MSVSAddIn - PRB
MSVSAddIn - By Phil Braica
C:\Documents and Settings\prb\Desktop\Research Articles\MSVSAddIn\MSVSAddIn\bin\MSVSAddIn.dll
MSVSAddIn.Connect
1
1
0
MiscCommands
类提供了访问配置表单和关于表单的接口,这些是使用提供的框架创建新命令的最简单示例。
这个示例插件运行一个外部工具,对当前解决方案生成Doxygen文档,并将其加载到查看器中。Doxygen是一个强大的工具,用于解析所有注释并生成描述详细设计的HTML文档。这个示例展示了如何启动另一个进程,监控它,处理一些常见的可能问题,并尽可能优雅地完成这些操作。当运行一个线程时,新进程可能没有完成,因此使用另一个线程来监控它。Doxygen使用一个名为“dot.exe”的图形工具,它接受图表的文本描述并实时生成图像。作者认为这是Doxygen最有趣、最吸引人的功能之一。在非常大的项目(例如从代码生成的巨大的状态机图表)中,有时需要花费大量时间来优化图表布局,可能会导致程序卡死。使用一个单独的线程来监控dot.exe,并在它似乎卡住时将其终止。查看器是一个简单的示例,展示了如何使用C#以最简单的方式查看HTML。
这个类接受一个高亮的成员变量片段的C#代码,并将其转换为(尽可能)一个带有受保护成员变量的属性。它将接受并处理初始值、访问器、修饰符等。
例如,将以下代码:
int a = 2;
protected object b = new object();
public static List c;
转换为:
/// ///
///
///
///
protected int m_a = 2;
/// ///
///
///
///
public int a
{
get
{
return m_a;
}
set
{
if (m_a == value)
return;
m_a = value;
}
}
该类添加了第二个命令,通过弹出模态表单来修改行为。使用它来快速为新的控件或类添加一组初始属性。
该类提供了两个命令,分别用于复制当前文件或复制解决方案中的所有文件。在这两种情况下,它都试图检查文件是否可能是自动生成的,并且是否已经存在版权声明。为了做到这一点,该类必须找到文件中的第一个代码元素,并获取从文件开始到第一个代码元素的文本。使用简单的COM操作,如编辑点、文档接口和解决方案接口,来找到文件的开头,确定是否已经存在标题或应该添加标题,然后根据需要添加标题。这样,工具就支持语言来定位任何注释。添加了对几种语言的支持(VB、C#、C++、perl等),并添加了一个设置首选项的表单。
这个类提供了每个代码元素应该注释的占位符注释(或根据用户偏好只是书签)。它的目的是帮助识别与代码标准的偏差。作者总是尽量填写summary标签作为文档的最低水平,工具提供了一个很好的检查。该类旨在提供一个通过代码元素、它们的层次结构和类型进行排序的示例。