检索源代码模型元素

时间:2015-09-22 10:17:39

标签: c# .net visual-studio-2015 visual-studio-sdk

我正在开发我的第一个VS扩展程序。目标是单击解决方案资源管理器中包含类或接口的文件,然后使用t4模板生成相关的类,例如,代码合同,或元数据类,或DTO等。我成功创建了我的扩展菜单(似乎比以前版本的VS更容易 - 很好!)在VS的实验实例中,我创建了最简单的命令行项目一个非常简单的类,有一个int属性。我想要做的第一件事是当我右键单击该文件时,如果它不包含类或接口,我想隐藏我的扩展菜单项。我的MenuItemBeforeQueryStatus处理程序代码目前看起来很简单:

SourceProjectItem = ((IEnumerable)Dte2.ToolWindows
                                      .SolutionExplorer
                                      .SelectedItems)
                          .OfType<UIHierarchyItem>()
                          .FirstOrDefault()
                          .Object as ProjectItem;
SourcePathName    = SourceProjectItem.Document.FullName;
SourceCodeModel   = SourceProjectItem.FileCodeModel as FileCodeModel2;

foreach (CodeElement2 element in SourceCodeModel.CodeElements)
{
    SourceCodeClass = element as CodeClass2;

    if (SourceCodeClass != null)
        break;

    SourceInterfaceClass = element as CodeInterface2;

    if (SourceInterfaceClass != null)
        break;
}

前三行看起来工作正常:我得到了正确的文件路径,我得到了源代码模型的非空COM包装器,但是在循环结束后SourceCodeClass为null。我在这里缺少什么,请帮忙。

1 个答案:

答案 0 :(得分:0)

啊,当然!发布问题后一分钟我意识到:我必须递归寻找类或接口。我上面的循环只在名称空间上循环。