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

有帮助吗?

解决方案

我用来浏览项目的代码元素的方式。CodeModel或ProjectItem.filecodeModel.FilecodeModel在文章中描述:

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

如果性能是问题,请尝试避免LINQ层增强性能。除此之外,没有什么可做的,因为Envdte返回的所有代码元素返回的CodeElements Collections,此后是您过滤的。

其他提示

旧问题,但我将发布此信息以供将来参考。

CodeElement类上有一个Inflocation属性等于VSCMinFoLocation.vscminfolecocationexternal时,当元素来自引用汇编时。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top