2010-09-01 41 views
12

C#,Visual Studio 2010,WinForm應用程序時:VS 2010 - 錯誤打開用戶控件/形式設計

有時我確實有一些開我的控制/表單時,我得到一個錯誤消息的問題。所有代碼編譯和應用程序正常運行。打開設計器中的控件給我:

設計器加載程序沒有提供根組件,但沒有指出原因。

從我的經驗,我可以告訴,它通常是我的代碼中沒有得到正確初始化的東西,例如,一個屬性沒有在運行時以某種方式可用,但在設計器打開時沒有設置。唯一的問題是,根本原因很難找到。

問:當設計師在Visual Studio 2010中打開我的組件時,是否有機會以某種方式使用調試器?這會有很大的幫助,而解決問題的時間很可能只需幾分鐘。備註:爲了清楚起見,我知道如何使用調試器;-),我只是不知道如何告訴VS2010的設計師在調試模式下打開我的控件。

截至2010年第二季度增加:

感謝您的幫助。基本上它是MSDN庫文章描述如何做到這一點。

  • 我已成功地將它設置和運行二審 (沒有太多瞭解如何做到這一點)。
  • 它只在我的情況下失敗,因爲第二個VS2010實例(調試設計時間)未能找到我的自定義控件的 符號。我在調試/符號下手動添加了這些符號。沒有 結果,還是「斷點將不被打擊,因爲缺少符號」

順便說一句,使用這種方法是有幫助的排除符號加載一些東西(通過模塊窗口),因爲這將安全的一個很多時間。

現在,如果要弄清楚如何獲得符號解決,然後我就可以解決這個問題.....

+0

使用VS2010的第二個實例進行設計時調試工作,我仍然有一個與我的dll符號有關的問題。我已經發布這裏(http://stackoverflow.com/questions/3687840/vs2010-loading-symbols-to-debug-at-design-time-breakpoint-will-not-be-hit),並將解決方案也發佈這裏有一次我知道它。 – 2010-09-10 19:54:44

回答

13

絕大多數自定義控件的設計時問題都是由控件中的事件處理程序或方法覆蓋中的代碼在設計時和運行時引起的。這通常是可取的,例如,當您在「屬性」窗口中更改屬性時,您會得到即時反饋。

但是,當代碼依賴於某些在運行時可用但未設計時的情況時,這並不可取。像一個dbase連接或存儲在生成文件夾中的文件。這可能會產生異常,並且Visual Studio在設計時不能處理異常。最糟糕的情況是,您可以在沒有任何診斷的情況下將VS撞到桌面。但任何事情都有可能。

回顧你的控件的代碼,並確保應僅在運行時運行包裹像這樣的代碼位:

if (!DesignMode) { 
    // etc.. 
} 

硬病例可診斷與調試技巧在這個MSDN Library article

+0

感謝您的反饋Hans。首先,我必須先找到根本原因,然後才能利用「DesignMode」條件。 但是,MSDN文章介紹瞭如何做到這一點,只需要找出符號問題(如原始發佈中所述) – 2010-09-02 19:15:07

+0

我肯定會*以相反的方式執行此操作。 – 2010-09-02 19:17:11

+0

解決大多數情況下,一些仍然存在。 – 2011-08-17 15:08:18

12

調試在設計模式中你控制,你需要的Visual Studio的兩個實例。在第一個例子中,打開包含這個控制源代碼的項目。在項目屬性,調試器中,設置調用另一個Visual Studio實例的命令行(msdev?不準確地知道VS2010 - 從快捷方式獲取它),然後執行「啓動調試」命令。另一個Visual Studio實例啓動。在這個例子中,在窗體上使用你的控件的開放客戶端項目。

+0

謝謝亞歷克斯,這是正確的做法。漢斯的答案MSDN文章描述瞭如何做到這一點。但你的回答也是正確的。 備註:我的名聲還不夠高,無法爲您的答案投票。 – 2010-09-02 19:17:27