探索 .Net Core 的 SourceLink
阿新 • • 發佈:2020-11-17
### 介紹
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