Pergunta

Dado um nome de tipo, é possível usar o DTE para encontrar o ProjectEM em que o tipo está localizado? Algo semelhante a como o Navigate To... O diálogo funciona no Visual Studio 2010.

O mais próximo que pude encontrar é Solution.FindProjectItem, mas isso leva um nome de arquivo.

Obrigado!

Foi útil?

Solução

Eu tenho tentado fazer algo semelhante e criei o seguinte, o que simplesmente pesquisa em namespaces e classes até que ele atinja o que você está procurando.

Parece funcionar na maioria dos casos, embora, ao encontrar uma classe parcial, ele retornará apenas o primeiro acerto e, como é um modelo do arquivo, ele terá apenas os membros contidos nesse arquivo. Ainda descobrindo o que fazer sobre isso.

Isso vem de um modelo T4 e está usando o T4 Toolkit (que é de onde vem o TransformationContext); portanto, se você não estiver usando isso, basta pegar um elemento do projeto e aprovar o projeto.codemodel.codeElements para o método FindClass recursivo.

Exemplo de uso seria 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;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top