0

我正在为 C# 开发一个仅在调试期间使用的插件。实例化后,我的插件需要查找特定类或接口的所有实例,以显示有关找到的数据的图表。

如何在我的扩展中找到或访问这些对象?我可以访问我的扩展中的 DTE2 应用程序对象,但我不确定如何搜索 VS 正在调试的实际代码。我想我可能会以某种方式使用反射,但我不知道在哪里看。

谢谢。

4

2 回答 2

0

Visual Studio 插件实际上不可能进行这种类型的操作。当加载项在 Visual Studio 进程中运行时,对象在调试时处于被调试者进程中。在 .Net 中跨进程边界访问任意对象是不可能的。

于 2011-03-30T22:43:48.963 回答
0

我已经实现了一个插件,它在给定目录中搜​​索 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);
于 2011-03-30T22:54:46.450 回答