背景:
項目A:用C#寫的一個類庫文件
項目B:引用項目A的dll文件,完成編碼,也是C#編寫的。
需求:怎么能在調試的時候,調試斷點能夠從項目B中進入項目A中的代碼。
解決辦法就是:
假設,項目B引用的項目A的dll文件是 a.dll ,並且a中沒有引用項目A中其他的文件或者命名空間。如果a.dll中還引用了A項目下的其他命名空間的內容,如a2,那么在下面的操作也要包含a2的對應部分。
將項目A下A.Web文件夾下bin文件夾(即路徑:A/A.Web/bin/ )下的 a.dll與a.pdb文件,同時拷貝到B項目的外部引用文件夾下。這個"同時" 的含義是保證dll與pdb文件是同一個版本的。也就是說,你不能用時間點1的dll配合時間點2的pdb文件來進行調試進入dll的操作。如果a中還引用了a2命名空間的內容,那么必須也將a2.dll與a2.pdb文件同時拷貝過去,這個同時的含義同上。並且這個a2與a也是同時的。
這些准備好了之后,B項目中重新生成,在B項目中,在你引用a.dll中函數的地方加斷點,單步調試即可進入A項目中對應的被調函數。
表達上可能有含糊或者不准確的地方,還請批評指正。
實例說明:
在PMCost項目中,部分代碼如下,19行紅色框內的函數引用自ACore項目中的Common命名空間下AjaxMethodAttribute.cs,我們知道,在生成dll的時候AjaxMethodAttribute.cs下的函數會被包含在ACore.Common.dll下。
並且AjaxMethodAttribute.cs中只引用了system及其兩個子類,並沒有引用 PMCost項目下的其他自定義命名空間。所以在拷貝的時候只需要拷貝ACore.Common.dll 及ACore.Common.pdb即可。
將兩個文件拷貝到PMCost項目的外部引用中,在函數調用位置之前加斷點,單步調試即可進入dll中。