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