سؤال

بالنظر إلى اسم النوع ، هل من الممكن استخدام DTE للعثور على ProjectItem الذي يقع فيه النوع؟ شيء مشابه لكيفية Navigate To... الحوار يعمل في Visual Studio 2010.

أقرب ما يمكن أن أجد Solution.FindProjectItem, ، ولكن هذا يأخذ في اسم الملف.

شكرًا!

هل كانت مفيدة؟

المحلول

لقد كنت أحاول أن أفعل شيئًا مشابهًا ، وقد توصلت إلى ما يلي ، والذي يبحث ببساطة من خلال مساحات الأسماء والفصول الدراسية حتى تصل إلى الشخص الذي تبحث عنه.

يبدو أنه يعمل في معظم الحالات على الرغم من أنه عند مواجهة فئة جزئية ، فإنه لن يعيد سوى النتيجة الأولى ، وبما أنه نموذج للملف ، فإنه لن يكون للأعضاء الواردين في هذا الملف إلا. لا يزال معرفة ما يجب فعله حيال ذلك.

يأتي هذا من قالب T4 ويستخدم T4 Toolkit (وهو المكان الذي يأتي منه TransformationContext) ، لذا إذا كنت لا تستخدم ذلك ، فما عليك سوى الحصول على عنصر مشروع ومرور Project.codemodel.codeelements إلى طريقة FindClass المتكررة.

مثال على الاستخدام سيكون 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;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top