2009-06-02 94 views
1

我有一個桌面應用程序,我用Visual Studio開發,我需要更頻繁地更新應用程序的一小部分。爲了避免每次部署新安裝程序帶來的不便,我將更頻繁更新的支持功能拆分爲單獨的項目並將其編譯爲DLL。現在的桌面應用程序在與反射運行時加載這個DLL,然後進行實例化與接口定義的共享DLL裏面的對象,像這樣:Visual Studio 2005:調試來自不同項目的C#代碼?

Assembly a = Assembly.LoadFrom(supportDLLPath); 
ISupportModuleInterface obj = (ISupportModuleInterface)a.CreateInstance("SupportCode.SupportObject"); 
if (obj != null) 
{ 
    obj.OnTransferProgress += new FileTransferProgressHandler(obj_OnTransferProgress); 
    obj.OnTransferComplete += new EventHandler(uploader_OnTransferComplete); 
    obj.DoWork(packagePath) 
} 

它正常工作的大部分時間,但我需要調試它的問題,我無法可靠地讓Visual Studio調試器進入它。有時當通過代碼按下F11時,比如在進入DoWork時,它會自動在我的系統上找到DLL的源代碼並顯示它。但是,當觸發事件時,Visual Studio僅在Call Stack中顯示[External Code]標記,並且我無法在支持項目中的代碼中導航。

有沒有人有任何想法如何解決這個問題,所以我可以正確調試支持項目?謝謝!

回答

1

是否在「模塊」窗口(調試 - > Windows - >模塊,或按「Ctrl-D,M」)中列出了程序集,並且它是否列爲「符號加載」你期望的位置? (您可以通過右鍵單擊並選擇「加載符號...」來強制加載符號,如果找不到符合它的符號文件,將會彈出一個「打開...」對話框)。

此外,請檢查此窗口以確保該模塊未被加載兩次,並且程序集的版本/時間戳/位置是您所期望的。

最後檢查是否在「工具 - >選項 - >調試」下點擊「Just My Code」,看看是否取消選中它會有所作爲。

+0

成功!它在將它指向PDB文件並重新啓動項目之後將其拾取。 – jasonh 2009-06-02 19:45:22

0

你可以進入反彙編嗎?如果從我記得的內容來看,它會給你一條通往創建pdb時的源代碼的路徑。我必須這樣做來調試NHibernate,並且必須將源代碼放在創建'pdb'文件時的確切路徑上。之後,我可以毫無問題地進入源代碼。

+0

不幸的是,沒有。我右鍵單擊[外部代碼]並禁用了「轉到反彙編」。我嘗試添加.pdb文件位於選項 - >調試 - >符號下的位置,但仍無法識別DLL中的任何內容。 – jasonh 2009-06-02 19:30:03