2017-08-19 5 views
0

私はこの方法を使用してVSIXで新しいクラスを作成していますがありませんCodeClassControlsClassに関連付けようとすると、何らかの理由でモデルに全く存在しないようです。新しく作成されたクラスにはCodeClass要素

ProjectItem csClass = AddCSClass((DTE2)document.DTE, project, "ControlsClass"); 
if (csClass == null) { return; } 

var elements = csClass.FileCodeModel.CodeElements; 
List<CodeElement> codeElements = new List<CodeElement>(); 

foreach (CodeElement ce in elements) { Debug.WriteLine(ce.Kind); codeElements.Add(ce); } 

IEnumerable<CodeClass> csClassClasses = codeElements.Where(ce => ce.Kind == vsCMElement.vsCMElementClass).Cast<CodeClass>(); 
if (csClassClasses.Count() != 1) { return; } // TODO: Maybe throw an exception, file altered. 

私はそこにCodeClassを見つけるために期待していたが、私の驚きに、これは私が得たものである:

vsCMElementImportStmt(×5)

vsCMElementNamespace

ある場合はvsCMElementClass?私はこれを間違っているのですか?

答えて

0

答えが分かりました。 CodeElementsはツリー状であり、そのような要素を取得:

var elements = csClass.FileCodeModel.CodeElements; 

だけで、私はすべての輸入および名前空間を得た理由である、要素の最初の「層」を返します。そこからCodeNamespaceを取得した後、必要に応じたことすべてはその要素の子を取得することでした:

codeNamespaceは(私のシナリオで) elementsから最後 CodeElementある
CodeElements namespaceChildren = codeNamespace.Children; 

関連する問題