Senparc.Weixin.MP SDK 微信公眾平台開發教程(二十二):如何安裝 Nuget(dll) 后使用項目源代碼調試


  最近碰到開發者問:我使用 nuget 安裝了 Senparc.Weixin SDK,但是有一些已經封裝好的過程想要調試,我又不想直接附加源代碼項目,這樣就沒有辦法同步更新了,我應該怎么辦?

  這其實是一個很常見也具有普遍代表性的問題,解決方案也是通用的,本文我們就來學習如何對已經安裝了 dll 的項目的源代碼進行斷點調試。

一、配置

  第一步:打開 Visual Studio 2019(低版本操作應該也是類似的)

  第二步:點擊頂部菜單【工具】>【選項...】

  第三步:在【選項】窗口中,左側列表選擇【調試】

  第四步:在右側窗口中:

    • 取消選中【啟用“僅我的代碼”】
    • 取消選中【逐過程執行屬性和運算符號(僅限托管)】
    • 取消選中【要求源文件與原始版本完全匹配】
    • 其他還有的選項根據自己實際需要修改

  以下是我的開發環境完成的配置:

  

 

  第五步:點擊當前窗口左側當前選中的【常規】下方的【符號】,選中右側【NuGet.org 符號服務器】,再點擊右上方【+】號,添加地址:https://nuget.smbsrc.net,並選中:

 

    這一步用於定義符號文件(即包含源代碼調試定位信息的文件),以后每次調試,都會自動加載相關的文件,為了加快速度,我們可以原先進行緩存,點擊下方【加載所有符號】按鈕,然后等待緩存結束。

  注意:預先加載需要耗費比較多的時間(我重新測試了一次大概用了 20 分鍾),但是為了減少后面的反復等待時間,這是值得的(緩存並不會占用太多硬盤空間,請放心加載)。如果程序集有比較大的變化,或者發生問題,也可以使用下方的按鈕清空並重新加載。

  設置完成后點擊【確定】按鈕。

 

二、試驗

  下面讓我們以 Senparc.Weixin SDK 來測試一下,順便學習一下如何創建新項目和安裝 nuget 包。

  第一步:打開 Visual Studio 2019

  

 

    第二步,點擊【創建新項目】,選擇【ASP.NET Core Web 應用程序】(也可以選擇 .NET Framework 項目):

 

   第三步:點擊【下一步】,配置項目名稱、路徑等參數,如:

 

   第四步:點擊【創建】,在項目模板中選擇【Web 應用程序】(也可以選擇其他站點模板,主要為了演示調試過程,所以不重要):

 

   第五步:點擊【創建】,完成原始項目的創建:

 

   第六步:對項目標題點右鍵,選擇【管理 Nuget 程序包...】

 

   第七步:在打打的窗口中,選擇【瀏覽】標簽,在搜索框內輸入:Senparc.Weixin.MP,回車:

 

   請注意:盛派官方發布的庫都帶有“盛派”Logo的庫,並請仔細核對全名,有些庫是第三方開發者發布的。

  第八步:選中【Senparc.Weixin.MP】,在右側點擊【安裝】按鈕,如彈出確認框,點擊【我接受】。稍等片刻即可安裝完成(如果無法安裝,請更改 nuget 源,具體方法不在本文展開):

 

   第九步:打開 startup.cs,在 ConfigureServices() 方法中,寫入代碼((.NET Framework 項目可打開 global.asax.cs,在 Application_Start() 方法中):

var nonceStr = Senparc.Weixin.MP.Helpers.JSSDKHelper.GetNoncestr();

  說明:我們可以調試任意地方的代碼,寫在 startup.cs 中只是為了當前演示斷點可以盡快獲得。

 

  此時,我們已經可以在非調試狀態下查看反編譯的源碼(這一步不是接下去使用斷點調試源碼必須的,只作為可以擴展):把光標移到 GetNoncestr 方法名上,點擊鼠標右鍵,點擊【轉到定義】(或直接按 F12),此時會顯示提示框,點擊【是】,即可看到 dll 中的源代碼:

 

   注意:此源代碼是從 dll 反編譯過來的源代碼,已經在編譯過程中進行了優化,因此未必每個字符都 100% 和源代碼一致,甚至部分局部變量會被重新命名,但是最終執行結果是一致的,也不會影響到調試。

  關閉反編譯源碼的窗口(必須)*,然后回到 startup.cs,我們給 GetToken() 語句打上斷點:

 

  最后一步(第十步):點擊菜單【調試】>【開始調試】(或直接按 F5)運行程序(注意:請保證當前的編譯模式為 Debug):

 

    靜靜等待斷點命中,在此過程中,VS 會自動載入一系列跟蹤源碼需要的文件,可能需要一段時間,這取決於依賴包的數量和當前的網速:

 

     稍等之后,即可命中語句:

 

   鍵盤點擊 F11,就像你調試當前解決方案中的代碼一樣(如果提示是否允許從 github 下載源代碼,點擊同意):

 

  可以看到,現在 VS 打開了 github 上源代碼的窗口,此時如果繼續點擊 F11,可以進入到此方法中調用的 Guid.NewGuid() 的 .net core 的相關方法:

 

  現在連續點擊 F10,我們讓程序繼續執行,並在 startup.cs 中返回結果:

 

  

PS:

  * 之所以在調試源碼之前必須要關閉反編譯的窗口,是因為反編譯的代碼(包括代碼位置、名稱定義)和源碼相比通常都會有出入,如果在調試的時候,打開着反編譯代碼窗口,VS 會優先進入到反編譯窗口進行調試,但是調試定位是根據符號文件定義的,也就是說定位的源代碼的原始位置,此時可能就會出現偏差。

 

列教程索引

地址:http://www.cnblogs.com/szw/archive/2013/05/14/weixin-course-index.html

  1. Senparc.Weixin.MP SDK 微信公眾平台開發教程(一):微信公眾平台注冊
  2. Senparc.Weixin.MP SDK 微信公眾平台開發教程(二):成為開發者
  3. Senparc.Weixin.MP SDK 微信公眾平台開發教程(三):微信公眾平台開發驗證
  4. Senparc.Weixin.MP SDK 微信公眾平台開發教程(四):Hello World
  5. Senparc.Weixin.MP SDK 微信公眾平台開發教程(五):使用Senparc.Weixin.MP SDK
  6. Senparc.Weixin.MP SDK 微信公眾平台開發教程(六):了解MessageHandler
  7. Senparc.Weixin.MP SDK 微信公眾平台開發教程(七):解決用戶上下文(Session)問題
  8. Senparc.Weixin.MP SDK 微信公眾平台開發教程(八):通用接口說明
  9. Senparc.Weixin.MP SDK 微信公眾平台開發教程(九):自定義菜單接口說明
  10. Senparc.Weixin.MP SDK 微信公眾平台開發教程(十):多客服接口說明
  11. Senparc.Weixin.MP SDK 微信公眾平台開發教程(十一):高級接口說明
  12. Senparc.Weixin.MP SDK 微信公眾平台開發教程(十二):OAuth2.0說明
  13. Senparc.Weixin.MP SDK 微信公眾平台開發教程(十三):地圖相關接口說明
  14. Senparc.Weixin.MP SDK 微信公眾平台開發教程(十四):請求消息去重
  15. Senparc.Weixin.MP SDK 微信公眾平台開發教程(十五):消息加密
  16. Senparc.Weixin.MP SDK 微信公眾平台開發教程(十六):AccessToken自動管理機制
  17. Senparc.Weixin.MP SDK 微信公眾平台開發教程(十七):個性化菜單接口說明
  18. Senparc.Weixin.MP SDK 微信公眾平台開發教程(十八):Web代理功能
  19. Senparc.Weixin.MP SDK 微信公眾平台開發教程(十九):MessageHandler 的未知類型消息處理
  20. Senparc.Weixin.MP SDK 微信公眾平台開發教程(二十):使用菜單消息功能
  21. Senparc.Weixin.MP SDK 微信公眾平台開發教程(二十一):在小程序中使用 WebSocket (.NET Core)
  22. Senparc.Weixin.MP SDK 微信公眾平台開發教程(二十二):如何安裝 Nuget(dll) 后使用項目源代碼調試


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM