2012-02-14 84 views
73

我正在爲Visual Studio 2010編寫VSIX擴展,無法弄清楚如何調試它。如何調試Visual Studio擴展

一個明顯的方法是輸出消息。擴展程序模板使用Trace.WriteLine()。但是在哪裏可以找到它的輸出?

回答

144

Visual Studio Extensions可以像其他任何應用程序一樣進行調試。你只需要設置調試體驗來啓動加載擴展的devenv。嘗試在該項目,並選擇屬性

  • 轉到調試選項卡
  • ,點擊Start External Program單選按鈕下面

    • 右鍵。將它指向devenv.exe二進制文件。在我的機器它位於

      C:\ Program Files文件(x86)的\微軟的Visual Studio 10.0 \ Common7 \ IDE \ devenv.exe的

      在非x64的機器雖然可以去掉「 (x86)「部分。

      然後將命令行參數設置爲/rootsuffix Exp。這告訴Visual Studio使用實驗配置單元而不是正常的配置配置單元。默認情況下,VSIX擴展將在實驗配置單元中註冊。

      現在您可以使用F5,它將使用您的VSIX作爲可用擴展來啓動Visual Studio。

    +0

    謝謝你的回答,一擊解決了一個問題。多謝! – 2013-12-28 12:02:17

    +0

    @JaredPar - 有沒有辦法告訴vs2012擴展在vs2015預覽的實驗配置中註冊? – 2014-12-19 06:45:07

    +0

    我在VS2015做了這個,它工作。 – matthewpavkov 2016-01-21 21:16:22

    2

    OutputWindowHelper.OutputString方法寫入'常規'輸出窗口窗格(Ctrl Alt o)。我在.csproj的引用該行添加在VS 2013

    <Reference Include="Microsoft.VisualStudio.Services.Integration, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> 
    

    拿到這也看this answer

    +0

    注意OutputWindowHelper在Visual Studio 2015中不存在。如果調用此函數,只有VS2015的機器將引發錯誤。另請參閱https://github.com/landofjoe/NuspecPackager/issues/1 – Quango 2015-11-02 11:05:30

    38

    @JaredPar接受的答案在技術上是正確的,但是由於您需要爲每個開發人員重做一次,每次獲取代碼的新副本以及任何時候刪除csproj.user文件,這一事實都會受到影響。當你這樣做時,設置保存在csproj.user文件中。

    一個更好的選擇是將設置放在csproj文件中,這樣它們不會丟失。不幸的是,Visual Studio不允許您自動執行此操作,因此您需要手動添加設置。幸運的是,任何項目的設置都是一樣的。

    右鍵單擊並卸載項目,然後再次右鍵單擊並編輯csproj項目文件文件。在XML中,將以下內容添加到第一個PropertyGroup,例如TargetFramework之後。

    <StartAction>Program</StartAction> 
    <StartProgram>$(DevEnvDir)\devenv.exe</StartProgram> 
    <StartArguments>/rootsuffix Exp</StartArguments> 
    

    這具有以下優點;

    • 據其設置爲調試和發佈
    • 它運行的Visual Studio的任何版本您當前正在運行
    • 它簽入源代碼控制,使每個開發人員不必記住怎麼做它:)

    由於@MBulli國的意見,如果你已經取得了公認的答案更改,刪除*.csproj.user文件,因爲它的設置將覆蓋你添加到主csproj文件的人。

    +3

    請確保刪除* .csproj.user文件,因爲用戶設置優先於項目設置。 – MBulli 2015-10-18 09:04:09

    +0

    很好的答案,謝謝!比公認的效率高得多。 – 2017-11-17 08:17:58

    0

    如果您嘗試調試UnitTestExtension,則還應該將調試器附加到vstest。*。exe過程(如描述的here)。否則,您可能會看到激活斷點,但調試器將永遠不會觸發它。