2016-11-15 10 views
0

codeModel을 사용하여 파일에 코드를 추가 할 수 있습니다.Vspackage 개발, 파일 또는 클래스의 코드 요소를 얻는 방법

이제 변수와 같은 코드 요소를 지정된 클래스에 추가하려고합니다.

그래서 내가해야 할 일은 내가 수정하고 싶은 클래스를 얻는 것입니다. 다음 내 코드입니다 :

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++ 클래스가 있습니다.

제발 어떻게하는지 알려주세요.

답변

0

문제가 해결되어 요소의 모든 코드 요소를 열거 할 수 있습니다.

foreach (CodeElement element in eles) 
{ 
    if(element.Kind == vsCMElement.vsCMElementClass) 
    { 
     CodeClass cl = element as CodeClass; 
     ... 
    } 
    ... 
}