2015-06-08 77 views
0

我開發的Excel VSTO 4.0 C#加載項中存在一個錯誤,但只有在雙擊現有文件啓動時纔會發生Excel中。我試圖找出一種方法來啓動VS2013調試器,這樣我可以放入一些斷點,但是我沒有試過啓動調試器的方式,模擬了通過雙擊文件來啓動Excel的過程。通過雙擊現有文件啓動時調試Excel VSTO加載項

的方法,我試過到目前爲止:

  • 啓動Excel的本身,然後連接到過程
  • 雙擊一個Excel文件,然後附加到產生的過程
  • 在VS項目在「啓動操作」下的「調試屬性」中,在「啓動外部程序」框中輸入Excel Excel.exe的路徑,並在命令行參數框中輸入現有Excel文件的路徑
  • 將Excel.exe作爲新的現有項目添加到我的VS解決方案通往一個exis的路徑將文件作爲項目屬性中的參數,將其設置爲解決方案的啓動項目。

這些啓動調試器的方法都沒有重現錯誤。雙擊文件啓動Excel時是否有另一種開始調試的方法?

值得一提的是,我遇到的錯誤是當Excel尚未運行時雙擊現有文件時將創建一個空的工作簿。我需要找出哪裏/爲什麼這個空文件正在創建。如果Excel已經運行並且雙擊某個文件將其打開,則不會發生這種情況。

回答

0

嘗試使用任何日誌記錄機制來記錄代碼中的任何操作。因此,您將能夠在運行時查找代碼中發生了什麼。例如,您可以將操作寫入日誌文件。您可能會發現log4net庫有幫助。

+0

感謝您的建議。我已經想到了這一點,但它非常繁瑣,並會添加很多我不想在其中出現的代碼。作爲解決方法,我必須在某種程度上做到這一點。 – squillman

+0

除了你描述的那些之外,還有其他的方法。 –

+0

現在就接受這個,因爲這是我最終使用的方法。 – squillman

0

我假設你在處理WorkbookOpen事件的方法中pupse斷點。

當您雙擊一個Excel文件時,它將被加載並引發事件WorkbookOpen。 VSTO加載項尚未加載,因此您無法獲取該事件。加載工作簿後,Excel將加載VSTO加載項。

所以,當你的加載項被加載時,你的AddinStartup處理程序就會起作用。 在vb.net中,處理線顯示爲...

Private Sub ThisAddIn_Startup() Handles Me.Startup 

現在,您可以在ThisAddIn_Startup

If Application.ActiveWorkbook IsNot Nothing Then 
    DoSomething(Application.ActiveWorkbook) 
End If 

檢查加載工作簿的另一種方法模仿一些調試是打開文件並關閉文件,手動加載和卸載使用Excel選項的插件。

  1. 在Addin_Startup上放置一個斷點。

  2. 開始正常調試VSTO項目。

  3. 加載文件。

  4. 進入excel選項並通過取消選中卸載您的插件。

  5. 進入excel選項並通過檢查來加載你的插件。

+0

謝謝,但那不是我的情況。我需要在WorkbookOpen提出之前放置斷點。雙擊文件打開Excel時,會在文件加載前調用ThisAddin_Startup。這是在ThisAddin_Startup的操作過程中正在做的事情。 – squillman

+0

@squillman您應該避免在ThisAddin_Startup中處理工作簿,而是在此方法的WorkbookOpen事件中添加處理程序。文件加載時,將調用workbookopen處理程序,並且您可以在該處處理該文件。此外,我正在編輯我的答案,以另一種方式模仿你正在嘗試的事情。 –

+0

謝謝,我真的很感激你看着這個。我實際上沒有處理工作簿,但我確實需要參考活動工作簿。我在任務窗格中有一些UI元素需要在插件初始化時與工作簿關聯。我確實找到了使用日誌記錄得到的異常的解決方案,但我仍然希望找到能夠使用調試器的黑客攻擊。我現在要嘗試你的新想法。 – squillman

1

這個工作對我來說:

private void ThisAddIn_Startup(object sender, System.EventArgs e) 
{ 
    System.Diagnostics.Debugger.Launch(); 

    ... 
} 
相關問題