2012-08-14 1 views
3

내가 확장 (VSPackage) 내가 그것을 실행하고있을 때, 나는 OnEnterRunMode하지

public sealed class ComboBoxPackage : Package 
{ 
.... 
public ComboBoxPackage() 
     { 
      Trace.WriteLine(string.Format(CultureInfo.CurrentCulture, "Entering constructor for: {0}", this.ToString())); 
      _dte = (DTE)Package.GetGlobalService(typeof(DTE)); 
      _events = _dte.Events; 
      _debuggerEvents = _events.DebuggerEvents; 

      _debuggerEvents.OnEnterRunMode += _debugEvents_OnEnterRunMode; 
      _debuggerEvents.OnContextChanged +=_debuggerEvents_OnContextChanged;  
     } 

     void _debuggerEvents_OnContextChanged(EnvDTE.Process NewProcess, Program NewProgram, Thread NewThread, EnvDTE.StackFrame NewStackFrame) 
     { 
      throw new NotImplementedException(); 
     } 


     private void _debugEvents_OnEnterRunMode(dbgEventReason Reason) 
     { 
      return; 
     } 

} 

VSPackage.cs

의 생성자에서 디버거 이벤트의 2에 가입하고 개발하고있다가 (strating가 실행 작업 응용 프로그램) _debuggerEvents_OnContextChanged 만 호출되고 _debugEvents_OnEnterRunMode가 호출되지 않습니다.

Addin 프로젝트와 동일한 작업을 수행하면 정상적으로 작동합니다.

답변

1

늦었 으면 좋겠다. 코드에서 직접 DebuggerEvents에 대한 참조를 유지하고 거기에서 이벤트를 처리하고 있습니까?

그것은 나에게도 똑같은 일이 일어 났고, 나는 이렇게 수정했다.

+0

몇 번 읽어야했지만 문제가 실제로 해결되었습니다. 똑같은 문제를 가진 다른 사람들을 분명히하기 위해서. 해결책은'dte.Events'에서 얻은'DebuggerEvents' 객체에 대한 참조를 유지하는 것입니다. 그렇지 않으면, 아마도 가비지 콜렉터에 의해 소비됩니다. – Estiny