C # Add-In: Como você acessa instâncias de tempo de execução dos objetos enquanto depuração?

StackOverflow https://stackoverflow.com/questions/5493325

Pergunta

Eu estou desenvolvendo um som para c # que só seria usado durante a depuração.Uma vez instanciado, meu adicionar precisa encontrar todas as instâncias de uma classe ou interface específica para exibir um gráfico sobre os dados encontrados.

Como exatamente posso encontrar ou acessar esses objetos na minha extensão?Eu tenho acesso ao objeto de aplicativo DTE2 na minha extensão, mas não tenho certeza de como pesquisar o código real sendo depurado pelo vs.Estou pensando que poderia de alguma forma ser capaz de usar reflexão, mas não tenho certeza de onde olhar.

obrigado.

Foi útil?

Solução

I've implemented a plugin that searches through dlls in a given directory and finds classes that implement a particular interface. Below is the class I used to do this:

public class PlugInFactory<T>
{
    public T CreatePlugin(string path)
    {
        foreach (string file in Directory.GetFiles(path, "*.dll"))
        {
            foreach (Type assemblyType in Assembly.LoadFrom(file).GetTypes())
            {
                Type interfaceType = assemblyType.GetInterface(typeof(T).FullName);

                if (interfaceType != null)
                {
                    return (T)Activator.CreateInstance(assemblyType);
                }
            }
        }

        return default(T);
    }
}

All you have to do is initialize this class with something like this:

PluginLoader loader = new PlugInFactory<InterfaceToSearchFor>();
InterfaceToSearchFor instanceOfInterface = loader.CreatePlugin(AppDomain.CurrentDomain.BaseDirectory);

Outras dicas

This type of operation isn't really possible from a Visual Studio plugin. The object alive when debugging live in the debugee process while your add-in is running in the Visual Studio process. It's not possible to access arbitrary objects across process boundaries in .Net.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top