vspackage开发,如何获取文件中或class中的代码元素
Vspackage development, how to get code elements in a file or in a class
我可以使用 codeModel 将代码添加到文件中。
现在我想将变量之类的代码元素添加到指定的class。
所以我首先要做的就是获取我要修改的class。
以下是我的代码:
IVsProject project = YHMExtensionHelper.GetSelectedProject();
int found;
uint itemId;
VSDOCUMENTPRIORITY[] pdwPriority = new VSDOCUMENTPRIORITY[1];
project.IsDocumentInProject("TEST.h", out found, pdwPriority, out itemId);
if (found == 0 || itemId == 0)
return;
Microsoft.VisualStudio.OLE.Interop.IServiceProvider oleSp = null;
project.GetItemContext(itemId, out oleSp);
if (oleSp == null)
return;
ServiceProvider sp = new ServiceProvider(oleSp);
EnvDTE.ProjectItem item = sp.GetService(typeof(EnvDTE.ProjectItem)) as EnvDTE.ProjectItem;
var codeModel = item.FileCodeModel;
var eles = codeModel.CodeElements;
for (int i = 0; i < eles.Count; i++)
{
var singleItem = eles.Item(i);
var str = singleItem.Name;
}
但这不起作用,我可以得到eles.Count,我无法通过eles.Item(i)得到任何物品。
在TEST.h中有一个简单的c++ class。
请告诉我怎么做。
问题已解决,我可以使用枚举元素中的所有代码元素。
foreach (CodeElement element in eles)
{
if(element.Kind == vsCMElement.vsCMElementClass)
{
CodeClass cl = element as CodeClass;
...
}
...
}
我可以使用 codeModel 将代码添加到文件中。
现在我想将变量之类的代码元素添加到指定的class。
所以我首先要做的就是获取我要修改的class。 以下是我的代码:
IVsProject project = YHMExtensionHelper.GetSelectedProject();
int found;
uint itemId;
VSDOCUMENTPRIORITY[] pdwPriority = new VSDOCUMENTPRIORITY[1];
project.IsDocumentInProject("TEST.h", out found, pdwPriority, out itemId);
if (found == 0 || itemId == 0)
return;
Microsoft.VisualStudio.OLE.Interop.IServiceProvider oleSp = null;
project.GetItemContext(itemId, out oleSp);
if (oleSp == null)
return;
ServiceProvider sp = new ServiceProvider(oleSp);
EnvDTE.ProjectItem item = sp.GetService(typeof(EnvDTE.ProjectItem)) as EnvDTE.ProjectItem;
var codeModel = item.FileCodeModel;
var eles = codeModel.CodeElements;
for (int i = 0; i < eles.Count; i++)
{
var singleItem = eles.Item(i);
var str = singleItem.Name;
}
但这不起作用,我可以得到eles.Count,我无法通过eles.Item(i)得到任何物品。
在TEST.h中有一个简单的c++ class。
请告诉我怎么做。
问题已解决,我可以使用枚举元素中的所有代码元素。
foreach (CodeElement element in eles)
{
if(element.Kind == vsCMElement.vsCMElementClass)
{
CodeClass cl = element as CodeClass;
...
}
...
}