4

我有一个适用于 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既没用也不合适,因为这需要打开每个项目项。

4

2 回答 2

3

文章中描述了我用来导航 Project.CodeModel 或 ProjectItem.FileCodeModel 的代码元素的方式:

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

如果性能是一个问题,请尝试避免 LINQ 层是否可以提高性能。除此之外,没有什么可做的,因为 EnvDTE 返回的 CodeElements 集合返回所有代码元素,然后在您过滤时返回。

于 2010-08-25T13:15:41.023 回答
2

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

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

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

于 2014-01-27T18:23:48.463 回答