• 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();
    }

    实时了解作者更多技术文章,技术心得,请关注微信公众号“轩脉刃的刀光剑影”

    本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,但是必须保留本文的署名叶剑峰(包含链接http://www.cnblogs.com/yjf512/),且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系

  • 相关阅读:
    centos7 下载并安装.netcore SKD,运行.netcore 应用程序
    小网站到大网站架构的演化之路 学习总结
    suppersocke,websocket 功能学习总结
    定时任务 quartZ
    RabbitMQ 安装和功能点
    rabbitmq 发送 消费消息
    富文本编辑器
    vue AES加密解密
    css动画库
    el-table合并表格
  • 原文地址:https://www.cnblogs.com/yjf512/p/1758858.html
Copyright © 2020-2023  润新知