1. 程式人生 > >探索 .Net Core 的 SourceLink

探索 .Net Core 的 SourceLink

### 介紹 Source Link是一組軟體包和一個規範, 它將一些元資料新增到PDB檔案,以將本地檔案重新對映到GitHub上的檔案,因此Visual Studio可以在這需要時下載檔案, 該專案的目的是可以為使用Nuget安裝軟體的使用者提供原始碼除錯, Microsoft庫(例如.NET Core和Roslyn)都已啟用Source Link。 使用NuGet包是向專案新增依賴項的一種非常方便的方法,但是,當您遇到NuGet軟體包的問題並想對其進行除錯時,會有點麻煩,你可能需要從在github 檢視原始碼,或者直接git clone到本地, Visual Studio 2017 15.3以上版本中已經集成了Source Link , 現在你可以非常方便的在VS中除錯 .Net Core 和 Nuget分發的軟體包的原始碼,並且不需要安裝 ReSharper 這些工具,這是非常愉快的原始碼除錯體驗。 sourcelink 最初的版本是 [@ctaggart](https://github.com/ctaggart "@ctaggart") 實現的,看了下,原專案已存檔, 然後 .Net 團隊開始注意到這個專案,和 ctaggart 一起做了現在的版本。 官網地址: [https://github.com/dotnet/sourcelink](https://github.com/dotnet/sourcelink "https://github.com/dotnet/sourcelink") SourceLink 支援一下幾種原始碼來源: - github.com and GitHub Enterprise - GitLab - Azure Repos (former Visual Studio Team Services) - Azure DevOps Server (former Team Foundation Server) - Bitbucket ## 快速使用 必須滿足 Visual Studio 2017 15.3以上版本,然後做一下簡單的設定 開啟 工具 -> 選項 -> 除錯, 勾選 啟用源連結支援,取消勾選 啟用僅我的程式碼 ![](https://images.cnblogs.com/cnblogs_com/myshowtime/1882872/o_201116094015set1.png) 設定符號包(symbol packages) 的地址,它包含了原始碼檔案的url地址 ![](https://images.cnblogs.com/cnblogs_com/myshowtime/1882872/o_201116092256set2.png) Newtonsoft.Json 是我經常使用的一個軟體包, 也是 Nuget 下載量第一的包,我想看一下它的原始碼,瞭解如何進行序列化的,我新建了一個 .Net Core 的控制檯專案,現在斷點在序列化的這一步 ![](https://images.cnblogs.com/cnblogs_com/myshowtime/1882872/o_201116094741c1.png) 現在直接 F11 逐語句除錯, 第一次的話,由於網路原因,可能會比較慢,等待即可 ![](https://images.cnblogs.com/cnblogs_com/myshowtime/1882872/o_201116095334c2.png) 現在直接進入到了 Newtonsoft.Json 的原始碼, 它將無縫地讓我繼續除錯會話,非常方便, 如果您在公司內部使用Gitlab, Devops或在開源環境中釋出了NuGet,則絕對應該使用SourceLink。 它的路徑在 C:\Users\Spring Lee\AppData\Local\SourceServer\c15d6df0a4a5956040073c3613425e76998a1599e7eeac2338c52ed35d1a47b7\Src\Newtonsoft.Json\JsonSerializer.cs ## 在專案中使用SourceLink 接下來我會建立一個 netstandard2.0 版本的類庫專案,它的原始碼放在了github,並且我會發布到 Nuget.org,當然其他方式(Azure Devops,Gitlab) 也是支援的,讓它支援SourceLink 建立完成後,首先需要引入 **`Microsoft.SourceLink.GitHub`** ![](https://images.cnblogs.com/cnblogs_com/myshowtime/1882872/o_201116114224set3.png) 右鍵專案編輯專案檔案, 編輯csproj檔案 ```csharp netstandard2.0
true true snupkg
``` 然後需要提交 git,推送程式碼。 準備工作完成後,專案右鍵,直接打包,會同時生成 .nupkg 和 .snupkg(符號包) ![](https://images.cnblogs.com/cnblogs_com/myshowtime/1882872/o_201116145504sunpkg.png) 開啟 .snupkg 檔案,檢視 PDB Sources, 發現pdb 檔案包含了原始碼檔案的url地址 ![](https://images.cnblogs.com/cnblogs_com/myshowtime/1882872/o_201116150021pdb.png) 然後同時上傳到 Nuget.org, 上傳成功後,會同時有 package 和 symbols 的下載標識 ![](https://images.cnblogs.com/cnblogs_com/myshowtime/1882872/o_201116151031down.png) 到這裡為止,一個支援source link 的nuget包已經發布成功了,你可以用同樣的方式進行原始碼除錯 ### 打個廣告 HttpReports 是針對.Net Core 開發的輕量級APM系統, 基於MIT開源協議,針對於微服務場景,主要功能包括統計,分析,拓撲圖,告警, 鏈路監控,請求日誌等,感興趣的同學可以點個 Star 關注下,謝謝 Github地址:https://github.com/dotnetcore/HttpReports 線上預覽: http://122.51.188.23:8080 賬號: admin 密碼 123456