VS2008 AddIn 操作DTE2

 在VS2008扩展开发中,最重要的就是DTE对象。DTE对象提供了对扩展性模型中其他对象的访问。DTE是VS自动化模型中的顶级对象。

  在按照http://www.cnblogs.com/yjf512/archive/2010/06/05/1752401.html中描述的创建VS AddIn插件后,能在Connect类中找到private DTE2 _applicationObject这个属性,对文件的各项操作就是从这个DTE2属性中开始:

以下方法可以在Exec方法中引用:

 

如何使用DTE2打开一个解决方案:

 


private void OpenSolution(string solutionFullName, DTE2 _applicationObject)
{
try
{
((DTE2)_applicationObject).Solution.Open(solutionFullName);
}
catch (Exception ex)
{
throw;
}
}

 

 

取得当前解决方案中的所有方法:

(其中包含了对Project的操作、对FileCodeModel的操作,对codeElement的操作)

 


private CodeFunction2[] GetAllFunctionInCurrentCode(DTE2 _applicationObject)
{
List<CodeFunction2> codeFuncs = new List<CodeFunction2>();

int projectCount = _applicationObject.Solution.Projects.Count;
try
{
for (int i = 0; i < projectCount; i++)
{
Project project = _applicationObject.Solution.Projects.Item(i + 1);
foreach (ProjectItem vsproject in project.ProjectItems)
{
if (vsproject.Name.Contains(".cs"))
{
FileCodeModel2 CM = (FileCodeModel2)vsproject.FileCodeModel;
foreach (CodeElement2 codeElement in CM.CodeElements)
{
if (codeElement.Kind == vsCMElement.vsCMElementNamespace)
{
CodeElement2 eleTemp = codeElement;
Queue<CodeElement2> childElements = new Queue<CodeElement2>();
childElements.Enqueue(eleTemp);
while (childElements.Count != 0)
{
CodeElement2 topEle = childElements.Dequeue();
if (topEle.Kind == vsCMElement.vsCMElementFunction)
codeFuncs.Add((CodeFunction2)topEle);
if (topEle.Children != null)
{
foreach (CodeElement2 childrenItem in topEle.Children)
{
childElements.Enqueue(childrenItem);
}
}
}
}
}
}
}
}
}
catch (Exception ex)
{
throw;
}
return codeFuncs.ToArray();
}

 

时间: 2024-10-31 22:08:39

VS2008 AddIn 操作DTE2的相关文章

开发VS2008 AddIn 入门Sample

本文主要介绍的是VS2008插件开发 环境要求:VS2008:.Net3.5 目标:开发插件功能为"在VS中创建文本文档,并在文本开头输入//This code was created For Testing"   1,Create new project(Visual Studio Add-In)   2,按照wizard一步一步操作: 选择使用C#编写Addin 选择在.NET IDE 和Macro IDE中都可以使用AddIn 输入name和description 选中确定需要A

vs2008中怎样将一个类分写在多个 .cs 文件中?

问题描述 最近在用vs2008,如果一个类太长,想把它分开写在多个文件中,比如,有一个函数很长,想单独放在一个文件中,所有的属性也想单独放在一个文件中,怎样操作呢? 解决方案 解决方案二:partialclassXXX解决方案三:添加一个windows窗体,form1.cs和form1.designer.cs就是很好的例子,照着做就行解决方案四:添加多个类就可以了把类定义为public的,把类和属性也定义为public的如果是全局的变量用static定义,///<summary>///第一个属

System.Data.SQLite 数据库详细介绍_SQLite

SQLite介绍在介绍System.Data.SQLite之前需要介绍一下SQLite,SQLite是一个类似于Access的单机版数据库管理系统,它将所有数据库的定义(包括定义.表.索引和数据本身)都保存在一个单一的文件中.并且,SQLite是一个用C实现的类库,它在内存消耗.文件体积.简单性方面都有不错的表现,如果数据在10W条以下,查询速度也是相当快的.SQLite具有以下特征:实现多数SQL92的标准,包括事务(原子性.一致性.隔离性和持久性).触发器和大多数的复杂查询.不对插入或者更新

net vs2008-.net窗体问题。用vs2008操作

问题描述 .net窗体问题.用vs2008操作 在vs2008中自定义对话框获取另个对话框里的信息,怎样获取,比如:form1里的用户和年龄,怎样在form2里显示? 解决方案 vs2008是开发环境,它支持C# C++ VB F# Python ...好多语言,你这么一问天知道你问的是什么.假设你用的是C#,那么参考:http://bbs.csdn.net/topics/360140208 解决方案二: 这是窗体间传值问题. 构造函数传值.父子关系传值,还有public属性传值等等

VS2008开发Excel 2003 AddIn程序问题

问题描述 我要用VS2008开发Excel2003AddIn程序,有谁做过这方面的大侠分享下经验呗.我建完工程后编译跟踪,做弹出一个Excel界面,但是根本跳转不到程序的Start方法里,Excel界面上也没有我想要的预想的新菜单项.请大侠们指导下. 解决方案 解决方案二:我顶,不要沉解决方案三:大侠位帮帮忙呀解决方案四:继续顶上去呀

vs2008操作出现的警告问题。

问题描述 'e:ProgramFilesMicrosoftVisualStudio9.0Common7IDEDatabasedb.mdb'不是一个有效的路径.确定路径名称拼写是否正确,以及是否连接到文件存放的服务器.D:lcdDisplay(20120307)Display(20120307)DisplayForm1.Designer.cs1350 解决方案 解决方案二:确定这个路径正确吗,你这个路径是物理磁盘的绝对路径,是否应该以服务器路径为准或者写相对路径解决方案三:路径前面加了@没?解决方

Visual Studio 2008可扩展性开发(三):Add-In运行机制解析(下)

前言 在上篇Add-In运行机制解析(上)中,我分析了Add-In向导生成的代码,从中我们知 道只要创建一个类库,它包含实现了IDTExtensibility2接口的类,然后为其建立.addin 配置文件,就可以实现一个Add-In了.本文将更进一步,介绍Add-In的事件和生命周期, 为今后的开发打下基础. Add-In的事件 Add-In是事件驱动的,可以猜到的事件有加载.卸载.状态改变等等.事实上,这些 事件都与IDTExtensibility2接口有关,也就是该接口的5个方法: 如果要了

Visual Studio 2008 可扩展性开发(三):Add-In运行机制解析(下)

前言 在上篇Add-In运行机制解析(上)中,我分析了Add-In向导生成的代码,从中我们知道只要创建一个类库,它包含实现了IDTExtensibility2接口的类,然后为其建立.addin配置文件,就可以实现一个Add-In了.本文将更进一步,介绍Add-In的事件和生命周期,为今后的开发打下基础. Add-In的事件 Add-In是事件驱动的,可以猜到的事件有加载.卸载.状态改变等等.事实上,这些事件都与IDTExtensibility2接口有关,也就是该接口的5个方法: 如果要了解这些方

如何在VS2008中自定义多项目模板

环境要求:vs2008   目标:自定义模板,当VS2008创建项目时可以使用模板创建   1,在VS中创建项目,并修改至所要求的模板程度 现在假设我的解决方案中有两个项目:   2,File-->Export Template...(创建单个项目模板) 为TestProject1项目创建模板,填写模板description,Finish之后弹出MyExportedTemplate文件夹: 为TestProject2项目创建模板,填写模板description,Finish之后弹出MyExpor