2011-03-30 4 views
0

디버깅 중에 만 사용되는 C# 용 추가 기능을 개발 중입니다. 일단 인스턴스화되면 my add in은 특정 클래스 또는 인터페이스의 모든 인스턴스를 찾아서 발견 된 데이터에 대한 그래프를 표시해야합니다.C# 추가 기능 : 디버깅 중에 개체의 런타임 인스턴스에 어떻게 액세스합니까?

내 확장 프로그램에서 이러한 개체를 정확하게 검색하거나 액세스하려면 어떻게해야합니까? 내 Extension에서 DTE2 응용 프로그램 개체에 액세스 할 수 있지만 VS로 디버깅중인 실제 코드를 검색하는 방법을 잘 모르겠습니다. 나는 어떻게 든 반사를 사용할 수 있을지도 모른다고 생각하고있다. 그러나 나는 어디에서보아야하는지 모른다.

감사합니다.

답변

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

유용합니다,하지만 난 클래스의 실제 인스턴스를 필요 발견 된 클래스가 인터페이스를 구현하는 것은 아닙니다. @ JaredPar가 정확하고 나의 요청이 불가능하다면 여전히 이것을 사용할 수 있습니다. –

0

이 유형의 작업은 Visual Studio 플러그인에서 실제로 가능하지 않습니다. 추가 기능이 Visual Studio 프로세스에서 실행되는 동안 디버깅 할 때 살아있는 개체가 디버거 프로세스에 있습니다. .Net의 프로세스 경계를 ​​넘어 임의의 객체에 액세스하는 것은 불가능합니다.