Frage

ein Typname Gegeben ist es möglich, DTE zu verwenden, um die ProjectItem zu finden, dass die Art in ist? Etwas Ähnliches, wie der Navigate To... Dialog funktioniert in Visual Studio 2010.

Der nächstgelegene ich finden konnte, ist Solution.FindProjectItem , aber das braucht in einem Dateinamen.

Danke!

War es hilfreich?

Lösung

Ich habe versucht, etwas Ähnliches zu tun, und haben kommen mit den folgenden, die einfach durchsucht Namespaces und Klassen, bis es den einen trifft Sie suchen.

Es scheint in den meisten Fällen zu arbeiten, obwohl, wenn eine Teilklasse der Begegnung wird es nur den ersten Treffer zurückzukehren, und da es ein Modell der Datei ist wird es nur die in dieser Datei enthaltenen Mitglieder. Immer noch herauszufinden, was das zu tun.

Dies ergibt sich aus einer T4-Vorlage und wird unter Verwendung von T4-Toolkit (das ist, wo TransformationContext herkommt) also, wenn Sie das nicht verwenden, nur ein Halten eines Projektelements erhalten und Project.CodeModel.CodeElements auf die rekursive Findclass passieren Verfahren.

Beispiel zur Nutzung wäre Findclass ( "MyCompany.DataClass");

private CodeClass FindClass(string className)
{   
    return FindClass(TransformationContext.Project.CodeModel.CodeElements, className);
}

private CodeClass FindClass(CodeElements elements, string className)
{
    foreach (CodeElement element in elements)
    {       
        if(element is CodeNamespace || element is CodeClass)
        {
            CodeClass c = element as CodeClass;
            if (c != null && c.Access == vsCMAccess.vsCMAccessPublic)
            {
                if(c.FullName == className)
                    return c;

                CodeClass subClass = FindClass(c.Members, className);
                if(subClass!= null)
                    return subClass;
            }

            CodeNamespace ns = element as CodeNamespace;
            if(ns != null)
            {
                CodeClass cc = FindClass(ns.Members, className);
                if(cc != null)
                    return cc;
            }
        }
    }
    return null;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top