我正在开发我的第一个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。我在这里缺少什么,请帮忙。
答案 0 :(得分:0)
啊,当然!发布问题后一分钟我意识到:我必须递归寻找类或接口。我上面的循环只在名称空间上循环。