2012-03-15 91 views
1

我建立一個Visual Studio 2010的插件,並試圖加載解決方案時,鉤到一個事件。SolutionEvents對於Visual Studio 2010插件不火

基本上就是我發現的是,SolutionEvents.Opened似乎正是我要找的,但是聽它的OnConnection似乎並不奏效:

public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) 
{ 
    applicationObject = (DTE2)application; 
    var outputWindow = (OutputWindow)applicationObject.Windows.Item(Constants.vsWindowKindOutput).Object; 
    outputWindowPane = outputWindow.OutputWindowPanes.Add("My Pane"); 
    applicationObject.Events.SolutionEvents.Opened += SolutionEventsOnOpened; 
    outputWindowPane.OutputString("Connected"); 
} 

private void SolutionEventsOnOpened() 
{ 
    outputWindowPane.OutputString("SolutionEventsOnOpened"); 
} 

outputed唯一的一點是「連接的」。

我試圖聽SolutionItemsEvents.ItemAdded和SolutionEvents.ProjectAdded也是他們不火。

我應該初始化的事件在其他地方? (注意:我已經安裝了R·,也許是knowed造成的問題?)

回答

3

發現這裏的解決方案:http://blogs.microsoft.co.il/blogs/kolbis/archive/2007/11/22/hooking-up-to-the-solution-events.aspx

基本上,你需要在你的加載類範圍的SolutionEvents和事件聲明會員變量並分配它們,然後通過它引用事件處理程序。例如。

private Events2 m_events; 
    private SolutionEvents m_solutionEvents; 

然後在的OnConnection處理器(當你的插件被初始化)做到這一點:

m_application = Application as DTE2; 

    m_events = (Events2)m_application.Events; 
    m_solutionEvents = m_events.SolutionEvents; 

最後,電纜鋪設工作的解決方案打開/ AfterClosing事件,如下所示:

m_solutionEvents.Opened += m_openSolution; 
    m_solutionEvents.AfterClosing += m_closeSolution; 

然後事件將會發生。

我相信這樣做的原因是因爲否則活動/ SolutionEvents對象得到改變或GC'd(或兩者;-)。

HTH