Надстройка C #: как получить доступ к экземплярам объектов во время выполнения при отладке? - PullRequest
0 голосов
/ 31 марта 2011

Я разрабатываю надстройку для C #, которая будет использоваться только во время отладки.После создания моей надстройки необходимо найти все экземпляры определенного класса или интерфейса для отображения графика найденных данных.

Как именно я могу найти или получить доступ к этим объектам в моем расширении?У меня есть доступ к объекту приложения DTE2 в моем расширении, но я не уверен, как искать фактический код, отлаживаемый VS.Я думаю, что мог бы как-то использовать Reflection, но я не уверен, где искать.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 31 марта 2011

Я реализовал плагин, который просматривает dll в заданном каталоге и находит классы, которые реализуют определенный интерфейс. Ниже приведен класс, который я использовал для этого:

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);
    }
}

Все, что вам нужно сделать, это инициализировать этот класс примерно так:

PluginLoader loader = new PlugInFactory<InterfaceToSearchFor>();
InterfaceToSearchFor instanceOfInterface = loader.CreatePlugin(AppDomain.CurrentDomain.BaseDirectory);
0 голосов
/ 31 марта 2011

Этот тип операции на самом деле невозможен из плагина Visual Studio.Объект живой при отладке живет в процессе debugee, когда ваша надстройка работает в процессе Visual Studio.Невозможно получить доступ к произвольным объектам через границы процессов в .Net.

...