我正在为 C# 开发一个仅在调试期间使用的插件。实例化后,我的插件需要查找特定类或接口的所有实例,以显示有关找到的数据的图表。
如何在我的扩展中找到或访问这些对象?我可以访问我的扩展中的 DTE2 应用程序对象,但我不确定如何搜索 VS 正在调试的实际代码。我想我可能会以某种方式使用反射,但我不知道在哪里看。
谢谢。
我正在为 C# 开发一个仅在调试期间使用的插件。实例化后,我的插件需要查找特定类或接口的所有实例,以显示有关找到的数据的图表。
如何在我的扩展中找到或访问这些对象?我可以访问我的扩展中的 DTE2 应用程序对象,但我不确定如何搜索 VS 正在调试的实际代码。我想我可能会以某种方式使用反射,但我不知道在哪里看。
谢谢。
Visual Studio 插件实际上不可能进行这种类型的操作。当加载项在 Visual Studio 进程中运行时,对象在调试时处于被调试者进程中。在 .Net 中跨进程边界访问任意对象是不可能的。
我已经实现了一个插件,它在给定目录中搜索 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);