我正在为C#开发一个只能在调试过程中使用的插件。一旦实例化,我的添加需要查找特定类或接口的所有实例,以显示有关找到的数据的图形。C#加载项:调试时如何访问对象的运行时实例?
如何在我的扩展中找到或访问这些对象?我有权访问我的扩展中的DTE2应用程序对象,但我不确定如何搜索VS正在调试的实际代码。我想我可能以某种方式能够使用反射,但我不知道在哪里看。
谢谢。
我正在为C#开发一个只能在调试过程中使用的插件。一旦实例化,我的添加需要查找特定类或接口的所有实例,以显示有关找到的数据的图形。C#加载项:调试时如何访问对象的运行时实例?
如何在我的扩展中找到或访问这些对象?我有权访问我的扩展中的DTE2应用程序对象,但我不确定如何搜索VS正在调试的实际代码。我想我可能以某种方式能够使用反射,但我不知道在哪里看。
谢谢。
我已经实现了一个插件,它可以通过给定目录中的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);
这种类型的操作实际上不可能从Visual Studio插件。当您的加载项在Visual Studio进程中运行时,该对象在调试时处于活动状态。在.Net中跨越进程边界访问任意对象是不可能的。
这是有用的,但我需要的类的实际实例发现。不仅仅是哪个类实现了一个接口。如果@ JaredPar是正确的并且我的请求是不可能的,仍然可以使用它。 – 2011-03-30 23:06:20