如何才能在EnvDTE中只获取当前项目中定义的类?

时间:2010-08-24 20:38:34

标签: envdte

我有一个Vs2010的套餐,目前正在跟随

EnvDTE=>Solution=>Projects=>CodeModel=>CodeElements

以递归方式执行以下操作并查找类

var q = elements.Cast<CodeElement>()
            .Where(x => x is CodeClass || x is CodeNamespace)
            .Where(x => x.Name.StartsWith("System") == false)
            .Where(x=>x.Name.StartsWith("Infragistics")==false)
            .Where(x=>x.Name.StartsWith("Microsoft")==false)
            .Where(x => x.Name.StartsWith("ICSharpCode")==false);

运行速度相当慢,有没有办法将此查询/搜索限制为仅限当前项目中定义的类/类型?

据我了解,FileCodeModel既不实用又不合适,因为这需要打开每个项目项目。

2 个答案:

答案 0 :(得分:3)

本文描述了用于导航Project.CodeModel或ProjectItem.FileCodeModel的代码元素的方式:

HOWTO:从Visual Studio .NET宏或加载项中导航文件的代码元素 http://www.mztools.com/articles/2006/MZ2006008.aspx

如果性能有问题,请尝试避免LINQ层增强性能。除此之外没有太多事情要做,因为EnvDTE返回的CodeElements集合会返回所有代码元素,然后在您过滤时。

答案 1 :(得分:2)

老问题,但我会发布这个以供将来参考。

当元素来自引用的程序集时,CodeElement类上的InfoLocation属性等于vsCMInfoLocation.vsCMInfoLocationExternal。

了解更多信息: http://msdn.microsoft.com/en-us/library/envdte.codeelement.infolocation.aspx