Frage

Ich entwickle ein Hinzufügen von C #, das nur beim Debuggen verwendet werden würde.Einmal instanziiert, muss mein Hinzufügen von allen Instanzen einer bestimmten Klasse oder Schnittstelle zum Anzeigen eines Diagramms über die gefundenen Daten gefunden werden.

Wie genau finden Sie diese Objekte in meiner Erweiterung?Ich habe Zugriff auf das DTE2-Anwendungsobjekt in meiner Nebenstelle, aber ich bin nicht sicher, wie Sie den tatsächlichen Code durchsuchen sollen, der von vs. debuggt istIch denke, ich könnte irgendwie Reflexion verwenden in der Lage sein, aber ich bin mir nicht sicher, wo ich ansehen soll.

danke.

War es hilfreich?

Lösung

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

Andere Tipps

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top